Inheritance 상속

기록하는 용도·2022년 8월 7일
0

상속(Inheritance)

부모 ( super class ) 멤버 ( instance variable , method ) 를 자식( sub class ) 이 물려받아 사용하는것

is a relationship => UML 의 Class Diagram 에서 generalization
예) 사람은 동물이다 / 개는 동물이다. / 매니저는 사원이다. / 비서는 사원이다.

class 자식클래스 extends 부모클래스 { } //자식이 부모를 확장한다. 자식이 부모를 상속받는다.

//super class
class Animal{}

//sub class
class Person extends Animal{}

부모 멤버(속성, 기능)을 물려받아 사용
계층 구조 형성을 통한 다형성(Polymorphism) 적용 환경을 제공

상속(Inheritance)의 특징
: 자바는 단일 상속이다.
is a relationship / generalization 사람은 동물이다 개는 동물이다
부모의 private member는 상속받더라도 클래스 다르므로 접근 불가
extends keyword를 이용해 상속받는다



동물은 동물의 고유한 특성만 가져야한다.
Person은 study(), Dog는 bark(), Monkey는 ride()
이 때 사람이 bark, ride등을 갖게되면 응집도가 낮아진다고 볼 수 있다.


예제)


class Animal{ // super class 부모 클래스
	int age=1;
	public void eat() {
		System.out.println("eat");
	}
}

class Person extends Animal{ 
	
	// sub class 자식 클래스 : 자식 Person이 부모 Animal을 상속받는다.
	//자식 Person이 부모 Animal을 확장해서 ( extends ) 정의한다.
	
	public void study() {
		System.out.println("study");
	}
	
}

public class TestInheritance1 {
	public static void main(String[] args) {
		// 자식 Person 객체를 생성해서 테스트 해본다.
		Person p = new Person();
		p.study(); //Person에 정의한 메서드 실행
		p.eat(); // Animal로 부터 상속 받은 메서드 실행
		System.out.println(p.age); //Animal로 부터 상속 받은 인스턴스 변수에 접근
	}
}
```
<br></br>
### 예제2)
![](https://velog.velcdn.com/images/sohappyerin/post/4e15435e-2d93-4bf7-9427-188374c9829c/image.png)
상속을 받았어도 부모의 private member(속성, 기능)에는 클래스가 다르기때문에 접근 불가한 것을 볼 수 있다.
private 멤버는 자식도 건들지 못하는 것이다.
상속 받은 getter/setter로 접근하면 해결 할 수 있다.
![](https://velog.velcdn.com/images/sohappyerin/post/d37286c4-f9be-4072-b636-8f8d30affe24/image.png)

0개의 댓글