상속을 받을 때
A는 B이다 =>
상속관계
(자손-조상)
A는 B를 가진다 =>포함관계
(A 클래스에 B클래스 포함시키기)
- 프로그램의 모든 클래스를 분석해 가능한 많은 관계 맺도록 노력해, 코드의 재사용성 높이기
오버라이딩의 조건
1) 이름이 같기
2) 매개변수 같기
3) 반환타입 같기
조상클래스의 메서드를 자손 클래스에서 오버라이딩할 때
1) 접근 제어자를 조상 클래스 메서드보다 좁은 범위로 변경 불가능
2) 예외는 조상클래스 메서드보다 많이 선언 X
3) 인스턴스 메서드를 static 메서드로 또는 그 반대로 변경 x
super : 자손 클래스에서 조상클래스로부터 상속받은 멤버 참조하는데 사용되는 참조 변수
멤버변수와 지역변수 간의 이름 the same할 때 this로 구별했듯, 상속받은 멤버와 자신의 멤버와 이름이 같을 때 super을 붙이는 것
인스턴스 메소드에서는 자신이 속한 인스턴스 주소가 지역변수로 저장, 이는 참조변수인 this와 super의 값이 됨
조상의 멤버와, 자신의 멤버를 구별한다는 데 사용되는 점을 제외하고는 super, this는 근본적으로 the same
this() : 같은 클래스의 다른 생성자 호출에 사용
super() : 조상 클래스의 생성자 호출에 사용
자손 클래스 인스턴스 생성 시 , 자손의 멤버와 조상의 멤버가 모두 합쳐진 하나의 인스턴스 생성
자손 클래스의 인스턴스가 조상 클래스의 멤버들을 사용 가능
=> 이를 위해서는 조상 클래스 멤버의 초기화 작업 수행 필요
=> 자손 클래스 생성자에서 조상 클래스 생성자 호출돼야 함
생성자 첫 줄에서 조상 클래스 호출이유는, 자손 클래스의 멤버가 조상 클래스 멤버 사용할 수도 있어서, 조상 멤버들이 먼저 초기화 needed
Object 클래스 제외한 모든 클래스의 생성자 첫 줄에, 생성자, this() 또는 super() 을 호출해야 한다, 그렇지 않으면 컴파일러가 자동적으로 super()을 생성자 첫 줄에 삽입
- 접근 제어자 : public, protected, default, private
=> 접근 제어자는 한번에 하나만 선택 가능
static : 클래스의, 공통적인
클래스 변수는 인스턴스에 관계 없이 같은 값을 가진다.
하나의 변수를 모든 인스턴스가 공유하기 때문
static이 붙은 멤버변수와 메서드, 초기화 블럭은 인스턴스가 아닌 클래스에 관계된 것, 인스턴스 생성 않고도 사용 가능
private 자신 클래스 안에서만 가능
default 같은 패키지 내
protected 같은 패키지 내 + 다른 패키지의 자손 클래스에서 접근 가능
public 접근 제한 어디서나
1) 외부로부터 데이터 보호 위해
2) 외부에는 불필요한 내부적으로만 사용되는 부분 감추기 위함
- 메서드에 static과 absract 함께 사용 불가능
- static은 몸통이 있는 메서드에서만 사용 가능
- 클래스에 abstract와 final 동시 사용 불가
- final 은 클래스 확장 x, abstract는 상속 통해 완성돼야 한다는 것=> 서로 모순
- abstract메서드의 접근 제어자가 private일 수 없음
- abstract메서드는 자손클래스에서 구현해줘야 하는데, 접근 제어자가 private이면 자손클래스에서 접근 불가능