Java 상속 #5

jjinny_0609·2023년 2월 17일
0

Java

목록 보기
23/31

추상 클래스

추상 클래스의 용도

실체 클래스의 공통적인 특성(필드, 메소드)을 뽑아내어 추상 클래스로 만드는 이유가 무엇일까?
추상 클래스는 구현목적보다는 설계의 목적으로 사용한다.

  • 공통된 필드와 메소드의 이름을 통일할 목적 :
    실체 클래스를 설계하는 사람이 여러 사람일 경우, 실체 클래스마다 필드와 메소드가 제각기 다른 이름을 가질 수 있다
    예를 들어 소유자의 이름을 저장하는 필드를 Telephone 클래스에서는 owner라고 하고, SmartPhone클래스에서는 user라고 할 수 있습니다.
    전원을 켜는 메소드를 Telephone에서는 turnOn()으로 설계하고, SmartPhone에서는 powerOn()이라고 설계할 수 있습니다.
    이렇게 데이터와 기능이 모두 동일함에도 불구하고 이름이 다르다 보니, 객체마다 사용 방법이 달라집니다. 이 방법보다는 Phone이라는 추상 클래스에 소유자인 owner 필드와 turnOn() 메소드를 선언하고, Telephonee과 SmartPhone은 Phone을 상속함으로써 필드와 메소드 이름을 통일할 수 있다.
  • 실체 클래스를 작성할 때 시간 절약 :
    공통적인 필드와 메소드는 추상 클래스인 Phone에 모두 선언해두고, 다른 점만 실체 클래스에 선언하면 실체 클래스를 작성하는데 시간을 절약할 수 있다.
    다음 그림을 보면 Telephone과 SmartPhone은 Phone을 상속 받기 때문에 owner필드와 turnOn() 메소드를 선언할 필요가 없습니다. Telephone과 SmartPhone의 추가적인 특성인 autoAnswering()과 internetSearch() 메소드만 각각 선언하면 됩니다.


추상클래스 선언

추상 클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙여야 합니다.
abstract를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들 수 있습니다.

속성
public abstract class 클래스 {
//필드
//생성자
//메서드
}

추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다.
ex) Animal animal = new Animal();(X)
추상 클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용됩니다. 코드로 설명하면 추상 클래스는 extends 뒤에만 올 수 있는 클래스입니다.
class ant extends Animal { ... } (O)

추상 메소드와 재정의

[public | protected] abstract 리턴타입 메소드이름(매개변수, ...);

추상 클래스 설계 시 하위 클래스가 반드시 실행 내용을 채우도록 강제하고 싶은 메소드가 있을 경우
해당 메소드를 추상 메소드로 선언합니다. 자식 클래스는 반드시 추상 메소드를 재정의해서 실행 내용을 작성해야 하는데,
그렇지 않으면 컴파일 에러가 발생합니다.



출력결과

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글