자바는 객체지향프로그래밍(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에 대입해 주게 되는 것입니다.
주솟값을 출력해보면 같은 주솟값이 나옵니다.
'Java 관련 > Java' 카테고리의 다른 글
[Java] 상속과 다형성 (0) | 2021.11.05 |
---|---|
[Java] 다형성(polymorphism) (0) | 2021.11.04 |
[Java] 오버로딩(Overloading), 오버라이딩(Overriding) (0) | 2021.11.02 |
[Java] 클래스(class) (0) | 2021.11.01 |
[Java] java.lang.String api 활용하기 (0) | 2021.10.31 |