상속 (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 |