day13
클래스 상속
- 부모클래스의 멤버변수/메소드를 자식 클래스가 물려받는 것
- 부모클래스의 모든 멤버변수/메소드를 물려 받을 수 있다(X) => 접근제한자가 private이면 물려받을 수 없다.
- 부모클래스의 멤버변수/메소드를 선언하지 않아도 사용 가능
- 자식클래스가 A, 부모클래스가 B일때.
- 모든 클래스는 부모 클래스의 생성자를 호출한다.
- super(); 를 통해 직접호출하지 않으면 부모클래스의 기본생성자를 자동으로 호출한다
- 부모클래스는 하나만 존재 => 부모가 존재할 수 있고, 조부모가 존재할 수 있지만. 부모가 2분씩 있을 수 없다.
가능한 예)
class A{}
class AA extends A{}
class AAA extends AA{}
안되는 예)
class B{}
class C{}
class BC extends B, C{} //에러발생: 각각의 다른 부모클래스에 같은 이름의 메소드/변수들이 실행에서 충돌할 수 있음
클래스 상속 문법
class A extends B{
}
상속을 사용할 수 있는 상황
- A는 B이다. 가 성립하면 상속이 가능: is a 관례
(자식클래스가 부모클래스의 하위내용이라면 포함된 내용이라면 가능하단 뜻)
메소드 재정의(메소드 오버라이드 / 오버라이딩)
- 부모클래스의 메소드를 자식 클래스가 재정의 하는 것
- 부모클래스의 메소드와 선언이 똑같은 메소드를 입력하고 구현부를 수정
*final (=수정 할 수 없음)
-변수 : 상수가 됨
-메소드 : 오버라이딩 불가능 (=> 자식클래스에서 해당 메소드를 재정의 할 수 없다.)
-클래스 : 상속할 수 없음 (=> 부모클래스가 될 수 없음)
클래스간 타입 변환(p.333)
자동으로 가능한 경우
-자식클래스의 객체를 부모클래스로 변환시키는 경우, 자동으로 가능
자식클래스 객체1 = new 자식클래스();
부모클래스 객체2 = 객체1;
명시적으로 가능한 경우
- 부모클래스의 객체를 자식클래스로 변환시키는 경우, 명시적(강제)으로 해야하는데 항상 가능한 건 아님
P부모 c자식
가능한 예)- 부모객체가 자식클래스로 만들어진 경우, 자식클래스로 변환시키는 경우 가능
P p = new C();
C c= (C)p;
불가능한 예)- 부모객체가 부모 클래스로 만들어진 경우 자식 클래스로 변환시킬 수 없다.
P p = new P();
C c = (C)p;
A instanceof B: A를 B로 타입변환 할 수 있는지를 확인
할 수 있으면, 결과 값이 => true
할 수 없으면, 결과 값이 => false
<Summary>
상속
- A는 B이다
멤버변수
- A는 B를 가지고 있다
스마트폰은 카메라이다(X) => 카메라를 스마트폰에 상속할 수가 없다.
스마트폰은 카메라를 가지고 있다(O) => 카메라는 스마트폰의 멤버변수 될 수 있다.
가계부는 내역이다(X)
가계부는 내역들을 가지고 있다(O) => 멤버변수 / "has a 관계"라고 불러야 돼
** Day13: 필드/매개변수의 다형성, 오버라이딩/오버로딩의 차이 를 꼭 알 것!