상속
- 자식(하위) 클래스가 부모(상위) 클래스의 멤버를 물려받는 것
- 상속 대상 : 부모의 필드 & 메소드
- 개발 시간 단축, 객체의 다형성 구현, 코드의 중복성 다운, 유지보수 등 이점!!
상속 대상의 제한
- 부모클래스의 private 접근 제한을 가지는 필드와 메소드는 제외
- 부모클래스가 다른 패키지에 있을때 default 접근 제한을 가지는 필드와 메소드는 제외
extends 키워드
- 부모클래스를 상속받기위한 키워드
- 자바는 다중상속을 허락하지 않아 한클래스에 하나만 상속가능
자식 객체를 생성하면 부모 객체도 생성될까?
정답은 생성된다!!
- 자식 객체 생성시 부모 객체부터 생성되고 자식 객체가 생성된다.
- 부모 생성자가 호출이 완료되고 자식 생성자가 나중에 호출 완료된다.
- 자식 생성자가 부모생성자를 호출 하지 않아도 컴파일러가 자동적으로 super()를 통해 부모의 기본생성자를 호출
부모 생성자 호출 super()
- super(매개값)은 매개값과 동일한 타입, 개수, 순서가 맞는 부모 생성자 호출
- 부모 클래스에 기본생성자가 없다면 필수적으로 부모클래스에 맞는(매개변수) 생성자를 작성해야된다.
- 반드시 자식생성자 첫 줄에 위치 해야된다.
- 자식 생성자를 호출해서 자식객체를 생성시 부모 객체의 생성자 부터 호출한다.!!
public Student(String name, String ssn, int studentNo) {
this.studentNo =studentNo;
super("jaehong","93-12-23"); //컴파일오류.. 이유: 생성자의 첫줄에서 선언해주어야함!
}
Override 매소드 재정의
- 부모 클래스의 메소드를 자식 클래스에서 재정의 하는 것을 말한다.
- 접근 제한을 더 강하게 오버로딩 할 수 없다. ex) public -> private, default (X) 반대로는 가능
@Override 어노테이션
- 컴파일러에게 부모 클래스의 메소드와 선언부와 동일한지 검사하도록 지시
- 접근 제한을 더 강하게 오버로딩 할 수 없다. ex) public -> private, default (X) 반대로는 가능
- super.부모메소드() : 부모메소드 호출방법
다형성(Ployorphism)
- 같은 타입이지만 실행결과가 다양한 객체를 대입할수있는 성질을 말한다.
- A a = new B() //b는 부모객체 A클래스를 상속 받고있는 상태
- 자식 타입은 부모타입으로 자동 타입 변환된다.
- 객체를 부품화시킨다.! (타이어 예시 생각!)
- 부모 클래스 변수 = 자식클래스타입 부모 클래스 변수는 자식과 같은 주소를 가진다.
자동 타입 변환 이후 효과
- 부모 클래스에 선언된 필드와 메소드만 접근 가능
- 자식 클래스의 재정이된 메소드가 호출된다. (다형성관련)
class Parent{
void method1(){};
void method2(){}; // 1번 !!!!!!!!!
}
////////////////////
class Child extends Parent{
void method2(){..}//Overrideing // 2번 !!!!!!!!!
void method3(){}
}
class ChildEx{
public static void main(String args[]){
Child child = new Child();
Parent parent = child; //Parent로 자동 타입 변환
parent.method1();
parent.method2(); // 부모타입으로 형변환이 됬지만 1번이 아닌 오버라이딩된 2번이 실행된다!! 중요
parent.method3(); // 호출불가능
}
}
자식 타입인지 확인후 강제 타입
instanceof
public void method(Parent parent) {
if (parent instanceof Child) { //매개변수로 들어오는 객체가 Child 인지확인
Child Child = (Child) parent;
}
}