Java 관련/Java

[Java] 상속(inheritance)

씨네 2021. 11. 3. 08:58
728x90


자바는 객체지향프로그래밍(OOP)라고 했습니다.

이런 객체지향언어의 대표 특징 4가지가 있는데 그중 2가지가 다형성과, 상속이고 나머지 2가지는 추상화와 캡슐화입니다.

이번 포스팅에서는 그 중 상속에 대해 중점으로 보면서 다형성도 같이 알아보겠습니다!

1. 상속

상속이란 클래스에 다른 클래스의 기능을 추가하거나 재정의 하는 것을 말합니다.

상속으로 다른 클래스에 있는 메소드와 필드를 물려받아 사용하게 되는 클래스를 만들 수 있게 됩니다.

이런 기존의 클래스 상속해 주는 클래스를 부모클래스, 슈퍼(super)클래스, 상위클래스, 기초클래스라고 하며 상속받는 클래스를 자식클래스, 하위클래, 파생클래스라고 부릅니다.

또한 상속을 위한 키워드는 extends입니다.

자식클래스와 부모클래스를 벤다이어그램으로 그려보면 부모클래스가 자식클래스에 포함되어 있다고 볼 수 있습니다.

그렇기 때문에 자식클래스에서는 부모클래스의 메소드를 가져다 쓸 수 있지만 부모클래스에서는 자식클래스의 메소드를 가져다 쓸 수가 없습니다.

Super.java

package com.test01;

public class Super {

  public Super() {
    System.out.println("Super");
  }

}

AA.java

package com.test01;

public class AA extends Super {

  public AA() {
    System.out.println("AA");
  }

}

BB.java

package com.test01;

public class BB extends Super {

  public BB() {
    System.out.println("BB");
  }

}

위 코드의 상속 상태는 다음과 같습니다.

AA클래스와 BB클래스 모두 부모클래스인 Super클래스를 참조할 수 있지만 AA클래스가 BB클래스를 참조할 수는 없고 BB클래스가 AA클래스를 참조할 수 없습니다.

또한 부모 클래스도 AA클래스와 BB클래스를 참조할 수 없습니다.

교집합 형태라고 보실 수 있습니다.

MTest.java

package com.test01;

public class MTest {

  public static void main(String[] args) {
    AA a = new AA();

    Super s = a; // Super s에 a가 가진 new AA()한 "instance"의 주소값 대입
    //BB b = (BB)s; // s에 담긴 AA instance를 BB로 형변환

    System.out.println(a.hashCode());
    System.out.println(s.hashCode());

  }

}

위의 main()메소드를 실행하면 다음과 같이 출력됩니다.

AA a = new AA();는 객체를 만들어서 해당 클래스의 생성자를 호출하게 되는데 상속받고 있는 Super클래스의 생성자 먼저 호출합니다.

Super s = a;는 a가 new AA()를 통해 가진 주솟값을 s에 대입해 주게 되는 것입니다.

주솟값을 출력해보면 같은 주솟값이 나옵니다.

728x90