상속 (Inheritance)

민태영·2024년 2월 29일
0

상속

기존클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다. 기존에 정의되어 있던 클래스의 필드와 메서드들을 물려받아 새로운 클래스를 생성할 수 있다.
이때 기존의 클래스를 부모클래스, 상위클래스, 기초클래스라고 한다. 상속을 통해 새롭게 작성되는 클래스를 자식클래스, 하위클래스, 파생클래스라고 한다.
단 상위클래스에 정의된 private접근제한자를 둔 멤버 및 메서드는 하위클래스가 물려받을 수 없다.

상속의 장점

  1. 상위클래스를 재활용할 수 있다.
  2. 중복되는 멤버나 메서드들을 미리 상위클래스에 정의해 놓으면 자식클래스들을 따로 정의하지 않아도 된다.
  3. 클래스간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련한다.

어떨때 쓰일까

두 클래스간의 관계가 is - a관계일 경우
예1)
컴퓨터 - 데스크탑
컴퓨터 - 노트북
예2)
자동차 - k3
자동차 - 세단

상속방법

상속받을 클래스뒤에 extends <부모클래스이름>

public class Notebook extends computer {
	...

}

Method Overriding

부모로부터 물려받은 메서드가 자식클래스에서 사용하기에 완전히 적절하지 않거나 수정해야할 부분이 있을 경우 사용한다.

Method Overriding 방법

	// method overriding
	// 부모클래스로부터 상속받은 메서드가 자식클래스에서 사용하기 좋게 만드는 법
	// 상속받은 메서드와 똑같은 이름의 메서드를 만들어서 덮어쓰기
	public String toString() {
		// super를 사용하여 부모클래스의 메서드를 불러올 수 있다
		// super로 접근을 하면 private멤버들을 접근할 수 있다.
		String result = super.toString() + 
						  "\nScreen size: " + screenSize + "inches" + 
						  "\nWeight: " + this.weight;
	 	
		// 단순한 방법으로 아래와 같이 할 수 있지만 이미 부모클래스에서 코딩한 내용을 중복함으로 좋은 방법은 아니며 private멤버일 경우 접근제한이 걸린다.
//		String result = "Manufacturer: " + manufacturer +
//						  "\nCPU: " + processor + 
//						  "\nRAN: " + ramSize + " megabytes" + 
//						  "\nDisk: " + diskSize + " gigabytes" + 
//						  "\nProcessor speed: " + processor + " gigahertz" +
//						  "\nScreen size: " + screenSize + "inches" + 
//						  "\nWeight: " + this.weight;
		
		return result;
	}

!private멤버는 자식클래스에서도 직접적으로 접근을 할 수 없지만 super를 이용하여 접근할 수 있다.

profile
꿈을 꾸는 개발자

0개의 댓글