/ JAVA

상속

  • 자식(하위) 클래스가 부모(상위) 클래스의 멤버를 물려받는 것
  • 상속 대상 : 부모의 필드 & 메소드
  • 개발 시간 단축, 객체의 다형성 구현, 코드의 중복성 다운, 유지보수 등 이점!!

상속 대상의 제한

  • 부모클래스의 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;

    }
}

References.