//추상클래스(객체 생성 X)
abstract class Super {
private int num = 4; //멤버변수 가능
public Super(int num) {//생성자 가능
setNum(num);
}
abstract public void todo();//추상메서드 가능
public void call() {
todo(); // 이건될까??? !!!
}
// 일반메서드 가능
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
class Sub extends Super {
public Sub(int num) {
super(num);
}
@Override
public void todo() {
System.out.println("안녕");
}
}
public class Test {
public static void main(String[] args) {
Sub s = new Sub(100);
//System.out.println(s.getNum());
s.call();
}
}
위에 코드 중 이런 메서드가 있다. 저것이 되는 이유는 무엇일까?
public void call() { todo(); //이건될까? 된다. 이유는? }
call() 호출되었다.
-> Super는 객체생성이 불가능하다. Super의 하위 객체가 존재한다.
Super는 추상클래스.
추상메서드 todo()를 가지고 있다.
1에 의거하여 하위클래스는 일반클래스이다.
todo()가 오버라이드가 되어있다는 것이 보장된다.
상속관계에서 오버라이드를 한 경우, 무조건 오버라이드된 메서드가 호출된다.
-> call()에서 호출하는 todo() 하위클래스의 오버라이드 된 todo()를 나타낸다.