ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상속
    Back To The Basic/Java 2024. 11. 23. 21:25

    1. 상속

    객체지향 프로그래밍에서 빼놓을 수 없는 개념이 바로 상속이다.

    아래 상속계층도(class hierarchy)를 보면 조상 클래스와 자손 클래스가 무엇인지 바로 이해할 수 있다.

    자식 클래스는 조상을 상속 받기 때문에 조상 클래스의 기능을 다 내포할 수 있다.

     

     

    다음이 성립한다.

    • 조상 클래스 변경 -> 자손 영향
    • 자손 클래스 변경 -> 조상 영향 X
    • 멤버만 상속된다. (생성자와 초기화 블럭은 상속되지 않는다)
    • 자손 클래스의 멤버 갯수는 조상 클래스보다 같거나 많다.

    ⇒ 상속을 받는다는 것은 조상 클래스를 확장한다는 의미가 되기 때문에 extends 키워드를 사용한다.

     

     

    2. 오버라이딩

    1. 접근제어자는 조상 클래스의 메서드보다 좁은 범위가 될 수 없다.
    2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
    3. 조상 클래스가 선언한 예외보다 더 조상 클래스인 예외를 선언할 수 없다.
    4. 인스턴스 메서드 ⇆ static 메서드 변경할 수 없다.
    5. static 메서드는 클래스에 귀속되는 것이기 때문에 똑같은 이름의 static 메서드가 있다고 해도 오버라이딩은 아니다.

     

    3. super와 this

    조상 클래스의 멤버를 구분하고 싶을 때 super를 사용한다.

    자신의 멤버를 명시적으로 지칭하고 싶을 때 (ex. 지역변수와 구분하고 싶을 때) this를 사용한다.

    자식 클래스에서 오버라이딩 하지 않고 this.멤버를 출력하면 super.멤버와 같은 값이 출력된다.

    모든 인스턴스 메서드에는 자신이 속한 인스턴스 주소가 지역변수로 저장되는데 이것이 참조변수인 super와 this가 된다!

    static 메서드 (클래스메서드)는 인스턴스와 관련이 없기 때문에 static 메서드에서는 두 키워드를 사용할 수 없다.

     

     

    4. super() 와 this()

    this()

    같은 클래스 내 생성자간 호출에는 생성자의 이름 대신 this()를 사용한다.

    super()

    조상 클래스의 생성자를 호출할 때 사용한다.

    자손 클래스의 생성자에서 조상 클래스의 생성자가 호출된다. 명시적으로 호출하지 않으면 컴파일러가 암묵적으로 super()를 삽입하여 호출한다.

    자손 클래스가 조상 클래스의 멤버를 오버라이딩하지 않고 그대로 사용할 수 있기 때문에 조상의 멤버들이 먼저 초기화 되어 있어야 하기 때문이다.

    조상 클래스 생성자의 호출은 최고 조상까지 올라가서야 끝난다.

Designed by Tistory.