abstract 키워드 - 추상 메서드와 추상 클래스
2022. 11. 18. 14:13ㆍ책 공부/스프링 입문을 위한 자바 객체 지향의 원리와 이해
반응형
추상 메서드(Abstract Method) 란 선언부는 있는데 구현부가 없는 메서드를 말한다.
그리고 이 추상 메서드를 하나라도 가지고 있으면 반드시 추상 클래스(Abstarct Class)로 선언해야한다.
먼저 예제 코드를 쭉 읽어보자.
1-2. Driver Class
package main;
public class Driver {
public static void main(String[] args) {
Animal[] animals = new Animal[3];
animals[0] = new Cow();
animals[1] = new Mouse();
animals[2] = new Tiger();
for (int i = 0; i < animals.length; i++) {
animals[i].cry();
}
}
}
1-2. Animal Class
package main;
//public abstract class Animal {
public class Animal {
public void cry() {
System.out.println("어떻게... 울었더라..?");
}
/*
abstract void cry
*/
}
1-3. Cow, Mouse, Tiger Class
package main;
public class Cow extends Animal {
public void cry() {
System.out.println("찍찍");
}
/*
@Override
void cry() {
System.out.println("음머~");
}
*/
}
public class Mouse extends Animal {
public void cry() {
System.out.println("찍찍");
}
/*
@Override
void cry() {
System.out.println("찍찍");
}
*/
}
public class Tiger extends Animal {
public void cry() {
System.out.println("찍찍");
}
/*
@Override
void cry() {
System.out.println("어흥!");
}
*/
}
이중 뭔가 어색한 부분이 있다.
정답을 보기전에 한번 자세히 살펴보자
정답확인
Animal의 참조 변수를 통해 하위 클래스의 인스턴스가 가진 cry() 메서드를 호출하고 있으니
상위 클래스인 Animal 에는 cry() 가 반드시 존재해야 한다.
하지만 Animal에서 사용하지 않는 구현체를 넣을 필요가 있을까?
만약 넣는다고 하면 실수로 호출할 경우 난감할 수 있다.
바로 이런 경우 구현체는 없고 메서드 선언만 있는 추상 메서드를 사용하게 된다.
아래 예제를 보기 전에 아래 파일로 먼저 추상 메서드로 바꿔보도록 하자.
반응형
'책 공부 > 스프링 입문을 위한 자바 객체 지향의 원리와 이해' 카테고리의 다른 글
자바가 확장한 객체 지향 (0) | 2022.11.15 |
---|---|
캡슐화: 정보 은닉 (0) | 2022.11.15 |
다형성 (1) | 2022.11.15 |
상속성 (0) | 2022.11.14 |
추상화 ( Abstracion ) (0) | 2022.11.14 |