- 추상 클래스2024년 07월 23일
- chantleman
- 작성자
- 2024.07.23.:27
2024.07.23 - [자바] - 오버라이딩. 다형성
지난 시간에 만들었던 Animal 클래스처럼
상위 클래스 메소드에 아무 내용도 없고 설계만 하는 경우 추상클래스를 이용합니다.
public class Animal { public void cry() { } public void sing() { } }
이런 식으로 설계만 하는 경우에는 메소드를 만들 필요가 없기 때문에 아래와 같이 추상 메소드로 만듭니다.
public abstract void cry();
추상 메소드가 만들어지면 해당 클래스는 구현할 수 없습니다.(객체로 구현 불가능)
따라서 클래스도 abstract를 통해 추상 클래스로 만들어줘야 합니다.
public abstract class Animal { public abstract void cry(); public void sing() { } }
하지만 추상 메소드를 만들었다고 해서 그 클래스안에 있는 모든 메소드가 다 추상 메소드일 필요는 없습니다.
부모가 추상클래스이면 자식클래스에서 해야할 것이 있는데
1. 자식도 abstract를 통해서 추상클래스로 바꾸고 넘기던지
2. 부모클래스에 있는 추상 메소드를 자식에서 구현해주던지
public class Cat extends Animal{ @Override public void cry() { System.out.println("야옹~"); } }
이렇게 cry메소드를 구현해주던지
public abstract class Cat extends Animal{ }
자식 클래스도 추상클래스로 바꿔서 자식클래스에게 넘겨주면 됩니다.
public class Sedan extends Car { @Override public void run() { System.out.println("Sedan is running"); } }
근데 자식 클래스도 추상클래스로 바꿔버리면
어차피 그 자식의 자식에서 구현을 해야할텐데 왜 굳이 자식클래스를 추상클래스로 바꿔야하냐..
- 단계적 구현: 추상 클래스를 여러 단계로 나눌 때, 일부 공통 기능을 중간 단계에서 정의하고, 구체적인 구현은 최종 단계에서 제공할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 각 단계에서 특정 기능을 확장하거나 오버라이드할 수 있습니다.
- 설계의 명확성: 추상 클래스를 여러 단계로 나누면, 각 단계에서 제공하는 기능을 명확히 정의할 수 있습니다. 예를 들어, Vehicle 클래스는 모든 차량의 공통적인 기능을 정의하고, Car 클래스는 자동차에 특화된 기능을 정의하며, 최종적으로 Sedan 클래스에서 구체적인 구현을 제공합니다.
- 기능의 확장성: 추상 클래스의 중간 단계에서 기능을 확장하거나 수정할 수 있습니다. 이를 통해 특정 기능을 단계별로 추가하거나 변경할 수 있습니다.
728x90'자바' 카테고리의 다른 글
간단한 게시판 예제 (1) 2024.07.24 인터페이스 (2) 2024.07.24 오버라이딩. 다형성 (1) 2024.07.23 ValueObject (0) 2024.07.22 lombok.jar (0) 2024.07.22 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)