상속 (Inheritance)

하나의 클래스가 가지고 있는 특징들을 그대로 다른 클래스가 물려 받는 것이다.

작성하려는 클래스의 이름 뒤에 상속 받고자 하는 클래스의 이름을 키워드 "extends" 와 함께 작성한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Animal { 
    String name;
    public void setNmae(String name) {
        this. name = name;
    }
}
 
// 상속 예제1
public class Dog extends Animal { 
    // Animal 클래스를 상속받았기 때문에 Dog클래스에서도 name과 setName() 를 사용할 수 있다.
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);    // 결과: poppy
    }
}
 
// 상속 예제2
public class Dog extends Animal {
    // 자식클래스에는 부모클래스의 기능을 더한 새로운 메서드 추가가 가능하다.
    public void sleep() {
        System.out.println(this.name+" zzz");
    }
 
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);    // 결과: poppy
        dog.sleep();    // 결과: poppy zzz
    }
}
cs


IS-A 관계 (상속관계)
"Dog is a Animal"과 같이 말할 수 있는 관계를 IS-A 관계(상속관계)라고 한다.

1
Animal dog = new Dog();
cs
"개로 만든 객체는 동물 자료형이다." 으로 해석할 수 있다. 


1
Dog dog = new Animal(); // 컴파일 오류
cs

"동물로 만든 객체는 개 자료형이다." 으로 해석할 수 있다. 하지만 말의 앞뒤가 안맞는 것을 알 수 있다.



JAVA는 다중 상속을 지원하지 않는다.

다중 상속을 지원한다면 여러 클래스로부터 상속받을 수 있기 때문에, 

서로 다른 클래스로부터 상속 받은 멤버간의 이름이 같은 경우 이를 구별할 수 없는 단점을 가진다.


이러한 문제점을 없애기 위해 JAVA는 단일 상속만을 허용한다.

하나의 조상 클래스만을 가지기 때문에 다중상속에 비해 클래스를 쉽게 작성할 수는 없지만

클래스 간의 관계가 명확해지고 코드를 더욱 신뢰할 수 있게 만든다.




참고 출처: https://wikidocs.net/280


'Java' 카테고리의 다른 글

JVM (Java Virtual Machine) 개념과 JVM 메모리 구조  (0) 2018.11.27
생성자 (Constructor)  (0) 2018.11.27
객체지향 프로그래밍 (Object-Oriented Programming)  (0) 2018.11.26
객체지향 설계  (0) 2018.11.15
static과 final  (0) 2018.08.20

+ Recent posts