반응형
상속과 다형성
상속이란?
- 상위 클래스에서 만들어진 필드와 메소드를 하위 클래스가 물려받는 것
다형성이란?
- 하나의 객체가 여러 가지 타입을 가질 수 있는 것
상속 선언을 하면 하위 클래스에서는 상위 클래스에서 만들어진 필드와 메소드를 만들지 않고도 만든 것과 같은 효과를 얻을 수 있습니다. 상속은 코드 중복을 제거하여 클래스를 간결하게 구현할 수 있게 합니다.
상속은 "class 하위클래스 extend 상위클래스" 형식으로 쓰면 됩니다
자바에서는 다형성을 실현하기 위해 상위클래스 타입의 참조 변수로 하위클래스 타입의 멤버를 참조할 수 있도록 합니다.
"참조 변수의 수 <= 멤버의 수" 이 조건을 만족해야 참조할 수 있습니다.
class Person {
int age;
int height;
String name;
public void print() {
System.out.println(name + "/" + age + "/" + height);
}
}
class Student extends Person {
age = 20;
height = 170;
name = "홍길동";
}
public class Inheritance {
public static void main(String[] args) {
//다형성
Person p = new Person();
Student s = new Student();
Person p2 = new Student();
Student s2 = new Person(); //오류발생
//상속
s.print();
}
}
위의 예시를 살펴보겠습니다. 상위클래스는 Person클래스이고, 하위클래스는 Student클래스입니다.
하위클래스가 상위클래스를 상속받은 것을 볼 수 있고, 하위클래스에서 선언없이 상위클래스의 필드를 쓸 수 있는 것을 볼 수 있습니다.
s.print(); Inheritance클래스에서 하위클래스가 상속받았기때문에 상위클래스의 메소드를 쓸 수 있는 것을 볼 수 있습니다.
"//다형성" 이라고 표시한 부분에서 하나의 객체가 여러 타입을 가지면서 다형성이 실현된 것을 볼 수 있습니다. 하지만 Student s2 = new Person(); 부분은 오류가 발생합니다. 그 이유는 다형성의 조건이 지켜지지 않았기 때문입니다. s2의 멤버 변수의 수가 참조 변수의 수보다 많기 때문에 오류가 발생합니다.
반응형
'그 외 > Java' 카테고리의 다른 글
Lombok , JUnit , log4j / slf4j (0) | 2020.09.19 |
---|---|
배열(Array)과 ArrayList (0) | 2020.09.18 |
자바의 접근제어자 (0) | 2020.09.11 |
Git Bash 설치 및 github 주요 명령어 정리 (0) | 2020.09.07 |
Overriding(오버라이딩)과 Overloading(오버로딩) (0) | 2020.09.03 |