Java/JAVA

[JAVA] 자바의 상속(inheritance)

담크 2021. 9. 23. 15:11

오늘은 자바의 상속에 대해 공부해보도록 하겠습니다.

상속은 자바인 객체지향프로그래밍의 특징 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 클래스가 먼저 출력이 된 것입니다.

마찬가지로 그 밑에 BB로 새로운 객체를 만들어도 똑같죠

그리고 s와 a가 같은 해쉬코드값이 나온 건 a가 new AA( )를 통해 가지고 있는 주소 값을 그대로 s에 전달해줬기 때문에 같은 값이 나오게 됩니다.