new키워드로 클래스를 인스턴스화 시켰을때 무조건 생성자를 호출
만약 생성자가 없다면 인스턴스화 못함

 

근데 개발자가 클래스를 정의할때 생성자를 정의하지 않으면 자동으로 생성자가 만들어진다.

 

개발자가 생성자를 정의하지 않았을때 자동으로 만들어지는 생성자를 기본 생성자라고함

 

기본 생성자는 아무 매개변수도 받지 않고 아무 로직도 수행하지 않음

 

this?- 객체 자기 자신을 지칭

 

 

결과는 출력! 이렇게 나온다.인스턴스화

 

 

생성자 실행

출력!

 

 

문자열을 받아서 동현님 환영해요.

출력!

 

 

전역변수를 주석처리하면 this로 선언된 a,b 에러 표시.

합: 57

 

 

- super(a,b);대신에 this.a=a; this.b=b;가 들어가도 무방하지만 중복되는거 해결.

 

기본 생성자는 아래와 같은 형태로 만들어 진다
public calc(){}

 

생성자를 개발자가 직접 정의하지 않았을때 기본 생성자를 만들지만 개발자가 직접 생성자를 정의 했으면
기본 생성자는 안만들게 됨.

 

상속을 받으면 자식 클래스가 부모 클래스의 기본 생성자를 호출하게 됨. 근데 부모 클래스에 기본 생성자가 없으면 에러가 발생
이를 해결하기 위해서는 부모클래스에 안만들어진 기본생성자를 개발자가 직접 정의하면 에러를 해결할수 있음.

 

인스턴스화를 시킬때 그 클래스가 상속을 받고 있다고 해서 인스턴스화 시킬때 실행하는 생성자가 부모 클래스의 생성자를 호출하는 것이 아니라 인스턴스화를 하는 그 클래스의 생성자를 호출하는 것.

 

부모 클래스의 생성자의 코드와 자식 클래스의 생성자의 코드가 중복되는 것을 쉽게 해결할수 있음.
super(a,b);
-매소드는 부모 클래스의 생성자를 호출하는 메소드
-a,b에 있는 값을 부모 클래스의 생성자한테 전달해서 호출

 

★문제 로또

 

 

배열 6개를 담는다. 1~45개 랜덤 표현. 같은거 중복 제거 표현

 

 

 

★오버라이딩: 부모 클래스에 정의 되있는 메소드를 자식 클래스에서 코드를 다시 작성하는것
 - 메소드를 재 정의 한다고 표현


부모 클래스에 생성자를 직접 정의해서 기본 생성자가 안만들어졌을 경우 에러가 발생하기 때문에 기본 생성자를 개발자가직접 정의 해야하는데 만약 자식 클래스에 생성자에서 super()메소드를 사용해서 부모 클래스의 생성자를 호출한다면 부모 클래스에서 기본 생성자가 없어도 에러가 안남.

super???- 상위 클래스의 생성자를 호출 할 때 사용 (= 부모 클래스의 생성자 호출)


오버 라이딩을 진행하는 첫번째 이유 다른 사람이 만든 클래스를 내가 가져다가 쓰는데 그클래스에 정의 된
메소드가 마음에 안들어서 수정을 하고 싶은때 그 클래스를 직접 수정하면 실수로 잘못건들여서 클래스가 엉망이 되지만. 아무 클래스를 하나 만들어서 상속을 받은 다음에 마음에 안드는 클래스를 다시 만들기 위해서 오버라이딩 진행함
 
자식 클래스가 여러개 만들어져 운영 되는데 그 여러 자식클래스 중에 하나의 클래스가 부모가 가지고 있는 메소드를 약간 변형해서 사용해야 하는 경우에 오버라이딩을 통해 재정의 해서 이해하게 됨
 
오버라이딩을 해서 다른 자식 클래스한테 영향이 생기지 않는다
 - 내클래스에서만 변형해서 쓰인다.

오버라이딩의 제약조건
public int sum(){ 에러
리턴 타입이 바뀌면 안된다.
매개 변수의 개수가 다르면 안됨.
매개 변수의 자료형이 다르면 안됨.

 

 

 

 

@Override <- 오버라이드 어노테이션이라 칭
오버라이드 어노테이션은 아래에 메소드가 오버라이드를 하는것임을 나타낼때 사용
 
어노테이션을 안붙여도 오버라이드를 할수 있음.
어노테이션을 붙이면 가독성이 향상. 딱보면 이메소드를 오버라이드하는거 구나라고 분석하기 용이

 

오버라이드 어노테이션을 붙이면 아래 메소드가 오버라이드 제약조건이 충족이 되는지 확인함 그리고
충족 안되면 에러를 발생시켜줌

 

어노테이션을 붙여서 에러를 잡아 줌으로써 문제가 생기는 것을 감지 할수 있게 됨.
 
★오버로딩
- 동일한 이름에 메소드를 만드는것

 

오버로딩의 제약조건
-매개변수의 개수가 다르다
-매개변수의 개수가 똑같다고 하더라도 매개변수의 자료형이 다르면 오버로딩 조건이 충족됨.

 

매개변수의 개수가 똑같고 대신 매개변수의 자료형도 똑같은데 매개변수의 이름이 다르다고 오버로딩 조건이 충족되지 않음

 

매개변수의 개수나 자료형이 다르다면 오버로딩할때 리턴타입이 다른걸로 바꿔 사용할수 있음.

 

 

메소드 2개를 만들어 두수의 합과 세수의 합을 알수 있다.

 

 

초기값을 지정해주고 메소드를 같게 오버로딩을 만들고 sum메소드 통틀어 수의 합으로 간결하게 바꾼다.

 

this.val1=val1 과 this.val2=val2가 같으므로

 

 

setter로 묶어서 표현해준다.

 

 

 

3번 4번이 출력된다. 4번 int 0으로 해줘서 4번이 출력

 

오버로딩을 통해 매개변수에 따라서 다른 처리가 진행될 수 있게 구현

 

setter() 메소드를 오버로딩 해서 매개 변수 2개 넘어왔을 때와 3개 넘어왔을때를 다른 로직을 수행하게 처리 했음.

 

부모 클래스에서 오버로딩 된 메소드를 자식에서 오버라이딩시킬수 있음. . 즉 재정의 가능.

 

자식 클래스에 만든 메소드의 이름과 동일한 메소드가 부모 클래스에 매개변수의 개수와 자료형이 동일한게 있다면 그건 오버라이딩 즉 재정의하는것이고 없다면 오버로딩을 하는것

 

★패키지?
- 여러 소스파일을 묶음화 하는 용도로 사용되게 됨
- 여러 클래스를 묶음화 하는 용도로 사용됨.

 

소스파일이 패키지에 그룹화를 하기 위해서는 소스파일에  package korea1; <-해당소스파일이 어느 패키지
소속인지를 지정해 놓어야함
package korea1; 이파일은 korea1이라는 패키지에 소속됬음을 뜻

 

이클립스에서 소스파일을 만들면 자동으로 소스파일에 내용에 해당 파일이 어느패키지에 소속됐는지를
자동으로 삽입해 놓습니다. package korea1;이런키워드(자동)

 

1. 패키지를 사용하는 첫 번째 목적은  이름 중복을 해결하기 위함.
소스파일에 이름은 절대 똑같을수 없음. 하지만 패키지가 다르다면 소스파일에 이름이 동일해도됨
해서 패키지를 사용함으로써 이름중복에 문제를 해결  <-장점

 

ex)A B회사가 공동으로 프로그램 제작 A회사 에서 만든 소스파일에 이름과 B회사에서 만든 소스파일에 이름이 똑같아질
가능성이 충분히 있음
하지만 패키지에 이름이 다르게 만들면 A회사에서 만든 소스파일에 이름과 B회사에서 만든 소스파일에 이름이 똑같아도 충돌
나지 않음

 

2. 의미가 비슷한 소스파일,기능이 비슷한 소스파일을 한대 묶음화를 해서 관리하기 위해 패키지를 쓰게됨
패키지를 통해 비슷한 소스파일들을 묶어서 관리함으로써 관리 효율성이 증대.

동일 패키지에 존재하는 클래스는 접근 가능하지만, 기본적으로 다른 패키지에 있는 클래스는 접근이 안됨
하지만 접근할수 있게 만드는 방법이 존재.

다른 패키지에 있는 클래스를 사용하기 위해서는 그 사용할 클래스를 내 소스파일로 가지고 와야함..
import 키워드를 통해 다른 패키지에 있는 클래스를 내소스파일로 가지고 올수 있음.

패키지 안에 그 패키지를 만들고 계속 안에 패키지를 하위로 만들수 있음.
import korea2.*; 모든 클래스를 import
 

 

'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA/ 접근 제한자  (0) 2017.07.23
JAVA/ random,Array  (0) 2017.07.08
JAVA/ Class  (0) 2017.07.05
JAVA/ 메소드,return,함수  (0) 2017.07.02
JAVA/ 반복문(while,for)  (0) 2017.06.28

+ Recent posts