부모 ( 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)