IT 개발/Java

[Java] 자바 - 상속의 이해와 예제

KADOSHOLY 2022. 6. 29. 17:01
반응형

 

자바 - 상속의 이해와 예제

 

 

우리가 살아가는 세상속에서도 상속이라는 용어를 사용합니다 그렇게 때문에 "상속" 하면 떠오르는 이미지가 있습니다. 바로 부모로부터 자산을 물려받는 것입니다.

이러한 상속의 개념이 객체지향언어인 자바에서도 있습니다. 부모클래스로부터 그 속성을 물려받아 사용하는 상속의 개념에 대해서 사용예제와 함께 살펴보도록 하겠습니다.

 

 

   목차

  1. 상속의 개념
  2. 자바 상속의 특징
  3. 사용예제

 

 

1. 상속의 개념 (Inheritance)

 

상속은 클래스 생성시 부모클래스의 속성을 자식 클래스가 물려받는 것을 말합니다. 

자바에서 상속받은 클래스를 정의하기 위해서는 아래와 같이 extends 키워드 옆에 상속받고자 하는 부모클래스의 이름을 적어주면 됩니다.  

 

public class 클래스명 extends 부모클래스명 {  

	...  내용 구현  ...  

}

 

부모클래스를 상속받은 자식 클래스의 인스턴스는 부모클래스의 멤버와 자식클래스의 멤버를 모두 가지고 생성됩니다. 

주의할 점은 부모클래스 멤버는 접근지정자(public, private, protected, default)에 따라 자식클래스에서의 접근 범위가 달라집니다. 

  1. 부모클래스의 public과 protected 멤버에 대해서는 자식클래스에서 어디서나 직접 접근하여 사용 할 수 있습니다. (○)
  2. 부모클래스의 private 멤버에 대해서는 자식클래스에서 직접 접근하여 사용할 수 없습니다. (X)
  3. 부모클래스의 default(생략) 멤버는 동일 패키지에 있는 자식클래스에서는 접근 가능하나, 다른 패키지에 있는 자식클래스에서는 직접 접근할 수 없습니다. (△)

 

 

 

2. 자바 상속의 특징

  1. 자바에서는 다중 상속을 지원하지 않습니다. (하나의 상속만 가능)
  2. 자바의 모든 클래스는 최상위에 Object 클래스를 기본적으로 가지고 있습니다.

 

 

 

3. 사용예제

 

Person클래스를 상속받은 Dancer 클래스의 인스턴스는 부모클래스(Person클래스)의 멤버와 Dancer 클래스의 멤버 모두를 가지고 생성됩니다. 

 

그러나 부모클래스(Person클래스)의 private멤버 age는 자식클래스인 Dancer클래스에서 직접 접근하여 사용할 수 없습니다.

만약, 부모클래스(Person클래스)와 자식클래스(Dancer클래스)가 서로 다른 패키지에 있다면 부모클래스의 default(생략) 멤버인 name도 자식클래스(Dancer클래스) 내부에서 직접 접근하여 사용할 수 없습니다. 

 

 

상속받은 인스턴스 구조
상속받은 인스턴스 구조

 

1) 부모클래스와 자식클래스 정의

public class Person {			// 부모클래스
	String name;
	private int age;
	
	public void speak() {
		System.out.println("저는 " + name + "입니다.");
	}
}


class Dancer extends Person {	// 자식클래스 (Person을 상속받음)
	public void dance() {
		System.out.println(name + ": 춤을 춥니다.");
	}
}

 

2) 객체생성 및 실행

public class HelloWorld {
	public static void main(String[] args) {
		
		 Dancer dancer1 = new Dancer();
		 
		 dancer1.name = "홍길동";
		 dancer1.speak();
		 dancer1.dance();
	}
}

 

3) 실행결과

저는 홍길동입니다.
홍길동: 춤을 춥니다.

 

 

cf) 상속과 함께 알아야 하는 내용입니다. 참고하세요.

2022.06.27 - [IT 개발/Java] - [Java] 자바 - 오버로딩과 오버라이딩 (Overloading vs Overriding)

2022.06.27 - [IT 개발/Java] - [Java] 자바 - super 및 super( )의 용도와 사용방법

2022.06.29 - [IT 개발/Java] - [Java] 자바 - 접근제어자 public, private, protected 및 default

 

반응형