- 자식 클래스에게 강제성 부여가능 , 이를 통해서 기능 확장 가능함.
- 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스
- 추상 클래스에서 말하는 특성은 필드와 메서드를 의미.
- 직접적으로 객체 생성이 불가능하고 클래스를 상속 받아서 오버라이딩하여 사용해야 함.
- 추상 메서드를 하나 이상 가진 클래스
//추상 클래스
public abstract class Phone{
//필드
public String owner;
//생성자
public Phone(String owner){
this.owner = owner;
}
//메서드
public void turnOn(){
System.out.printLn("폰 전원을 켭니다.");
}
public void turnOff(){
System.out.printLn("폰 전원을 끕니다.");
}
}
- 추상클래스를 선언할 때에는 클래스 선언에 abstract 키워드를 붙어야 합니다.
- abstract를 붙이면 new 연산자를 이용해서 객체를 만들지 못하고, 상속을 통해 자식 클래스만 만들수 있습니다.
//실체 클래스
public class SmartPhone extends Phone{
//생성자
public SmartPhone(String owner){
super(owner);
}
//메서드
public void internetSearc(){
System.out.println("인터넷 검색을 합니다.");
}
}
- 위의 Phone 추상 클래스를 상속해서 SmartPhone 자식 클래스를 정의 한것.
- 생성자 부분에서 super(owner) 코드로 Phone의 생성자를 호출
public class PhoneExample{
public static void main(String[] args){
//Phone phone = new Phone():
SmartPhone smartPhone = new SmartPhone("홍길동");
smartPhone.turnOn():
smartPhone.internetSearch();
smartPhone.turnOff();
}
}
- 추상 클래스는 실체 클래스의 공통되는 필드, 메서드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할수 없습니다.(주석 부분)