자바프로그래밍

상속 ( Inheritance )

제주도소년 2020. 4. 7. 09:14

[ 상속 ]

상속은 클래스로부터 멤버변수와 메소드를 그대로 물려받아 상속받은 클래스에서 재사용 한다 라고 말 할수 있다. 이 때 상속받은 클래스는 자식클래스 또는 Sub Class라고 하고, 상속되는 클래스는 부모 클래스 또는 Super Class 라고 한다. 상속개념을 적용하면 코드 재사용성을 높이고 코드의 중복을 줄이며, 관리가 쉽다. 또한 버그를 줄여줄 수 있다. 자바는 상속 받을 수 있는 클래스는 단 하나이다. (즉 단일상속)


* 현실세계의 계층구조를 나타내기 위해서 사용한다.

* 상속은 의존성이 매우 높은 기법이다 : 부모클래스의 변경으로 인해 자식클래스에서 무슨 오류가 생길지 모르고, 부모 클래스는 자식 클래스를 알지 못함(상속은 매우 조심스럽게 사용해야 한다.)

* 상속된 변수와 메소드는 원래의 가시성을 유지한다 : 부모 클래스의 변수, 메소드가 public 이면 자식 클래스도 public 이다.


상속은 두 가지 조건이 만족되는 경우 사용해야 한다.

1. 상하 계층관계

2. +알파 (하위 클래스의 멤버변수, 메소드가 상위 클래스보다 더 많아야 한다.. 등)


상속을 받을 때 extends 라는 키워드를 사용한다. 현실세계에서 거의 모든 사람은 휴대폰을 사용한다. 휴대폰이 가지고 있는 몇가지 특성은 기본적인 브랜드, CPU, RAM, 무게 등이 있다. 이런 것들을 클래스로 작성하면 아래와 같다.

public class Phone {
	private String brand;
	private String cpu;
	private String ram;
	private int weight;
	
}

위의 Phone 클래스를 상속받아 galaxyS10 이라는 클래스를 만들고 extends 키워드로 Phone을 상속받아 부모 클래스가 가지고 있는 멤버변수를 그대로 사용하고, 출력하는 예제이다.

public class galaxyS10 extends Phone {

	public static void main(String [] args)
	{
		Phone galaxy = new Phone();
		
		galaxy.setBrand("samsung");
		galaxy.setRam("8GB");
		galaxy.setCpu("Octa-Core");
		galaxy.setWeight(150);
		
		System.out.println(galaxy.toString());
	}

[ IS-A ] ~은 ~이다. A is - a B

- 작 성 중 -


[ super ]

super 키워드는 부모클래스의 주소를 가지고 있다. 따라서 부모클래스의 메소드와 생성자를 호출할 수 있다.


상속관계에서 몇가지 규칙이 있다.

1. 생성자가 없으면 빈 생성자(no-parameter)가 자동으로 만들어진다. (생성자가 하나 이상이면 만들어지지 않음)

2. Sub Class의 생성자는 반드시 Super Class 의 생성자를 호출한다. ( 묵시적 호출과 명시적 호출이 있다. )

3. 명시적 호출방법은 생성자의 제일 첫 부분에 super 키워드를 사용한다.

 

아래와 같은 Event 클래스가 있고 파라미터가 하나인 생성자가 있다. DeadlinedEvent 클래스에서 Event 클래스를 상속받았고, DeadlinedEvent 클래스 생성자에서 super 키워드를 사용하여 생성자를 명시적 호출 하였다. 

public class Event {
	public String title;
	
	public Event(String title) {
		this.title = title;
	}
}
public class DeadlinedEvent extends Event {
	public MyDate deadline;

	public DeadlinedEvent(String title, MyDate date) {
		super(title); //명시적 호출
		this.deadline = date;
	}

	public String toString() {
		return title + ", " + deadline.toString();
	}
}

 

 

 

 

'자바프로그래밍' 카테고리의 다른 글

[ JDK 1.7 ] Interface (인터페이스)  (0) 2020.04.12
추상 클래스  (0) 2020.04.10
메소드 오버로딩(Method Overloading)  (0) 2020.04.01
캡슐화(Encapsulation)  (0) 2020.04.01
자바 시,분,초 계산  (0) 2020.03.17