[Java] abstract 응용하기

JTI·2022년 11월 8일
0

☕️  Java

목록 보기
17/59
post-thumbnail
//추상클래스(객체 생성 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(); //이건될까? 된다. 이유는?
}
  1. call() 호출되었다.
    -> Super는 객체생성이 불가능하다. Super의 하위 객체가 존재한다.

  2. Super는 추상클래스.
    추상메서드 todo()를 가지고 있다.
    1에 의거하여 하위클래스는 일반클래스이다.
    todo()가 오버라이드가 되어있다는 것이 보장된다.

  3. 상속관계에서 오버라이드를 한 경우, 무조건 오버라이드된 메서드가 호출된다.
    -> call()에서 호출하는 todo() 하위클래스의 오버라이드 된 todo()를 나타낸다.

profile
Fill in my own colorful colors🎨

0개의 댓글