JAVA,객체지향

추상클래스

25G 2021. 11. 26. 10:19

추상 클래스 = 추상적인 것(new 할 수 없다)

의자 침대 = new가능

가구 = new 불가능

자 다음과같이 오버 라이딩을 했을 때 d1.speak();를 호출을 하면 d1은 Animal타입이지만 동적 바인딩을 통해서 부모 메서드를 무효화하고 자식 메서드의 speak()가 호출이 된다.

그렇다면 Animal은 내용은 없이 껍대기만 있으면 되는데 일반적인 클래스로 하면 new로 메모리에 띄울 수 있기 때문에 실수할 확률이 높아진다.

그럴 때 abstract를 붙여서 추상 클래스를 만들어주는 것이다.

다음과 같이 추상 클래스로 만들어주면 추상적인 것이기 때문에 java세상에서 new로 탄생시킬 수 없다.

 

그럼 Bird클래스를 추가시켜서 Animal을 다시 상속받아본다고 하면 오류가 난다.

왜 오류가 날까?

추상 클래스를 상속받은 클래스는 자식 클래스는 부모 추상 클래스가 가지고 있는 메서드를 꼭 오버 라이딩해야 하는 강제성이 생긴다.

그리고 추상 메서드만 가질 수 만 있는 것이 아니라 일반 메서드도 만들 수 있다.

하지만 중요한 것은 추상 메서드를 가지고있으면 상속받은 자식들도 해당 추상메서드를 전부 오버라이드 해줘야 한다.

 


추상 클래스 == 미완성 설계도

 

육식 동물은 추상적인 것이다.

그리고 뱀과 사자같이 구체적인 것을 구현한다고 할 때 육식동물의 입장에서는 뱀과 사자가 공격하는 폼이 다르기 때문에 육식동물 입장에서 메서드를 완성시킬 수 없다. 그렇기 때문에 타입을 일치시켜서 미완성 설계도를 자식들에게 쥐어주고 자식들의 특성에 맞게 다시 설계할 수 있도록 해 주는 것이다.

 

하지만 공격 메서드가 아닌 "걷기()"라는 메서드를 만든다라고 하면 뱀과 사자가 걷기 하는 방식이 똑같기 때문에 추상 클래스에 추상 메서드가 아닌 추상 클래스에 일반 메서드를 만들어 줘도 된다

'JAVA,객체지향' 카테고리의 다른 글

SRP와 DIP  (0) 2021.11.26
추상클래스와 인터페이스의 차이  (0) 2021.11.26
오버라이딩  (0) 2021.11.25
오버로딩과 오버로딩의 한계  (0) 2021.11.25
다형성  (0) 2021.11.21