오늘은 자바의 상속에 대해 공부해보도록 하겠습니다.
상속은 자바인 객체지향프로그래밍의 특징 4가지 중 하나로 간단히 말하자면 부모의 것을 자식이 받아서 쓸 수 있는 것을 말합니다.
상속이란 클래스에 다른 클래스의 기능을 추가하거나 재정의하는것을 말합니다. 상속을 하게 되면 다른 클래스에 있는 메소드와 필드를 물려받아 사용하게 되는 클래스를 만들 수 있습니다.
지난 포스팅에서 잠깐 살펴봤지만 상속을 사용하기 위한 코드는 extends이며, 상속해주는 클래스를 부모클래스, 슈퍼클래스, 상위 클래스, 기초 클래스라고 하며 상속받는 클래스를 자식 클래스, 하위 클래스, 파생 클래스라고 합니다.
** 부모클래스 > 자식 클래스 이기 때문에 부모 클래스 밑에 있는 자식 클래스에선 부모 클래스의 메소드를 가져다가 쓸 수 있지만 부모 클래스에서는 자식 클래스의 메소드를 가져다 쓸 수 없습니다.
코드로 살펴보겠습니다.
Super.java
package test;
public class Super {
public Super() {
System.out.println("Super 클래스");
}
}
AA.java
package test;
public class AA extends Super{
public AA() {
System.out.println("AA 클래스");
}
}
BB.java
package test;
public class BB extends Super{
public BB() {
System.out.println("BB 클래스");
}
}
우선 위 코드를 보면 AA와 BB가 각각 Super클래스를 상속받고 있습니다.
따라서 AA클래스와 BB클래스에서는 Super클래스를 참조할 수 있지만 AA가 BB를 혹은 BB가 AA를 참조할 수 없고 부모클래스인 Super클래스 역시 AA와 BB클래스를 참조할 수 없습니다.
MTest.java
package test;
public class MTest {
public static void main(String[] args) {
AA a = new AA();
Super s = a;
System.out.println(a.hashCode());
System.out.println(s.hashCode());
}
}
코드 실행결과
위의 코드 실행결과를 보면 Super 클래스라는 부분이 먼저 출력이 되는데 그 이유는 맨 처음에 만들어준 AA a = new AA( );에서 객체를 만들 때 해당 클래스의 생성자를 호출하는데 상속받고 있는 Super클래스의 생성자를 먼저 호출해 주기 때문에 Super 클래스가 먼저 출력이 된 것입니다.
그리고 s와 a가 같은 해쉬코드값이 나온 건 a가 new AA( )를 통해 가지고 있는 주소 값을 그대로 s에 전달해줬기 때문에 같은 값이 나오게 됩니다.
'Java > JAVA' 카테고리의 다른 글
[JAVA] 자바의 추상클래스(abstract class) (0) | 2021.09.26 |
---|---|
[JAVA] 자바의 다형성(polymorphism) (0) | 2021.09.24 |
[JAVA] 자바의 오버로딩(Overloading), 오버라이딩(Overriding) (0) | 2021.09.22 |
[JAVA] 자바의 substring, split, StringTokenizer (0) | 2021.09.20 |
[JAVA] 자바의 String과 StringBuffer (0) | 2021.09.19 |