반응형

1. 추상 클래스 상속

abstract class Shape{
	public Shape(){}
    public void Paint(){draw();}
    abstract public void draw(); // 추상 메소드
}

abstract class Line extends Shape{ //추상 메소드 draw()를 상속 받았는데 구현을 하지 않으면 sub class 역시 추상 클래스가 된다
	public String toString(){
    	return "Line";
    }
}

자바에서 슈퍼클래스의 추상 메소드를 서브 클래스에서 구현하지 않으면,

서브 클래스 역시 슈퍼 클래스처럼 abstract 클래스가 된다.

 

적절한 비유는 아니지만

abstract를 빚으로 생각한다면

부모 클래스에 있는 abstract(빚) 메소드를 자식이 해결하지 못한다면

자식도 abstract class가 되어버린다.

(abstract class면 객체를 생성할 수 없다..) 

 

 

2. 추상 클래스 사용 이유

서브 클래스마다 다르게 구현해야 할 필요가 있는 메소드를 추상 메소드로 정의해준다.

abstract class Animal{
	abstract void bark();
}

class dog extends Animal{
	void bark(){
    	System.out.println("멍멍");
    }
}

class cat extends Animal{
	void bark(){
    	System.out.println("냐옹");
    }
}

class bird extends Animal{
	void bark(){
    	System.out.println("짹쨱");
    }
}

이런 느낌이다.

큰 프로그램의 객체지향 설계를 해줄 때 서브 클래스의 세부 내용을 각각 다르게 해주어야 할 경우

이런 식으로 추상 메소드를 이용해주면 깔끔하게 코드를 정리할 수 있다.

+ Recent posts