반응형
상속 (Inheritance)
클래스 상속을 위해서는extends 라는 키워드를 사용한다.
자식 클래스는 상속받은 부모 클래스의 멤버를 사용할 수 있다.
class Person {
public void Func1(){
System.out.println("this is parent Func1");
}
public void Func2(){
System.out.println("this is parent Func2");
}
}; // 부모 클래스
class Minsu extends Person {
}; // 자식 클래스
public class Main {
public static void main(String[] args){
Minsu minsu = new Minsu();
minsu.Func1(); // 부모 클래스의 멤버 함수
minsu.Func2();
}
}
반응형
IS-A 관계
Person 클래스를 상속한 Minsu 클래스는 Person 클래스의 하위 개념이라고 볼 수 있다.
이는 "민수는 사람이다." "Minsu is a Person" 라고 표현할 수 있는데 이러한 관계가 바로 IS-A관계 즉, 상속관계이다.
Person minsu = new Minsu(); // Ok
Minsu person = new Person(); // Error
위의 결과를 보면 Minsu 자료형으로 Person 객체를 생성하는 것은 가능하지만,
Person 자료형으로 Minsu 객체를 생성하려고 하면 에러가 난다.
민수라는 자료형으로 사람 객체를 만들 수 있다.
민수는 사람이기 때문에 공통된 사람의 특성을 갖기 때문이다.
반면, 사람이라는 자료형으로 민수 객체를 만들 수는 없다.
왜냐하면 민수는 수많은 사람 중 하나이고 사람 자료형만으로는 민수를 모두 표현할 수 없기 때문이다.
※ 추가로 민수(자식) 자료형으로 사람(부모) 클래스를 만들 경우 아래를 주의해야 한다.
class Person {
public void Func1() {
System.out.println("this is parent Func1");
}
}; // 부모 클래스
class Minsu extends Person {
public void Func1() {
System.out.println("this is child Func1");
}
public void Func2() {
System.out.println("this is child Func2");
}
}; // 자식 클래스
public class Main {
public static void main(String[] args) {
Person minsu = new Minsu();
minsu.Func1();
minsu.Func2(); // error
}
}
사람 클래스를 민수 자료형으로 만들었기 때문에 멤버의 내용은 민수 클래스로 나타나지만,
이는 민수 자료형으로 만들었다 한들, 사람 클래스이기에 사람 클래스의 멤버만 사용할 수 있다.
어찌 보면 당연한 이야기지만 헷갈릴 수 있는 부분이다.
반응형
'JAVA > 예제' 카테고리의 다른 글
[JAVA] 예제로 알아보는 상속 (3) 오버로딩과 오버라이딩 (0) | 2022.04.14 |
---|---|
[JAVA] 예제로 알아보는 상속 (2) 생성자와 super (0) | 2022.04.14 |
댓글