추상 클래스
우리가 지금까지 만든 필드, 생성자 함수, 메소드가 있는 클래스를 실체 클래스라고 한다. 추상 클래스는 이러한 실체 클래스들의 공통적인 특성을 추출해서 선언한 클래스이다.
추상 클래스는 미완성 클래스라고 할 수 있으며, 객체를 생성할 수 없다. 또한 new 연산자를 직접 사용할 수 없다.
추상 메소드가 1개라도 있으면 추상 클래스이며, 일반 메소드와 추상 메소드를 같이 선언할 수 있다.
추상 클래스는 다음과 같이 선언한다.
public abstract class 클래스 {
//필드
//생성자
//메소드
}
추상 클래스는 new 연산자로 직접 객체를 생성할 수 없다.
Animal ani = new Animal(); //에러
추상 메소드
추상 메소드는 메소드의 선언부(리턴형, 함수명, (매개변수))만 있고 { }가 없는 메소드이다.
접근제한자 abstract 리턴타입 메소드명(매개변수, ...);
abstract class Animal { //추상 클래스
String name;
void view() {} //일반 메소드
abstract void disp(); //추상 메소드(미완성)
}//class end
추상 클래스를 상속받은 자식 클래스는 반드시 추상 메소드를 완성해야 한다.
//추상클래스는 부모 역할만 주로 한다
class Elephant extends Animal {
@Override
void disp() {
System.out.println("점보");
}
}//class end
class Tuna extends Animal {
@Override
void disp() {
System.out.println("니모");
}
}//class end
추상 클래스인 Animal은 new 연산자로 직접 객체를 생성할 수 없지만, 그 자식 클래스인 Elephant와 Tuna는 실체 클래스이므로 객체를 생성할 수 있고 부모 클래스인 Animal로 형 변환이 가능하다.
//다형성
Animal animal = new Elephant();
animal.disp();
animal = new Tuna();
animal.disp();
아래 예제를 통해 추상 클래스와 다형성을 살펴보자
package oop0915;
abstract class Travel { //추상 클래스
void view() {}//일반 메소드
abstract String travelWhere(); //추상 메소드
}//class end
class TypeA extends Travel {
@Override
String travelWhere() {
return "제주도 올레길";
}
}//class end
class TypeB extends Travel {
@Override
String travelWhere() {
return "여의도 벚꽃축제";
}
}//class end
class TypeC extends Travel {
@Override
String travelWhere() {
return "지리산 둘레길";
}
}//class end
public class Test05_abstract {
public static void main(String[] args) {
// 추상클래스와 다형성
Travel tour = new TypeA();
System.out.println(tour.travelWhere());
tour = new TypeB();
System.out.println(tour.travelWhere());
tour = new TypeC();
System.out.println(tour.travelWhere());
}//main() end
}//class end
'웹개발 교육 > Java' 카테고리의 다른 글
[35일] Java (40) - 익명 객체 (0) | 2022.09.15 |
---|---|
[35일] Java (39) - interface (0) | 2022.09.15 |
[35일] Java (37) - 다형성 (0) | 2022.09.15 |
[35일] Java (36) - super (0) | 2022.09.15 |
[35일] Java (35) - 연습 문제 (0) | 2022.09.15 |