Java
추상클래스

객체를 직접 생성할 수 있는 클래스를 실체 클래스 라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 추상클래스와 실체 클래스는 상속의 관계를 가지고 있다.


예를들어 Bird.class, Insect.class, Fish.class등의 실체 클래스에서 공통되는 필드와 메소드를 따로 선언한 Animal.class 클래스를 만들수 있는데, 이것이 바로 추상 클래스라고 볼 수 있다.


추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다. 추상 클래스는 new 연산자를 사용해서 인스턴스를 생성시키지 못한다.


Animal animal = new Animal(); (x)


추상 클래스는 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용된다. 예를 들어 Ant 클래스를 만들기 위한 Animal클래스는 다음과 같이 사용할 수 있다.


class Ant extends Animal { .... } (o) 


추상클래스의 용도

1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적

2. 실체 클래스를 작성할 때 시간을 절약

추상 클래스를 선언할 때에는 클래스 선언에 abstract키워드를 붙여야한다.


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


추상 클래스도 일반 클래스와 마찬가지로 필드,생성자,메소드 선언을 할 수 있다.

new 연산자로 직접 생성자를 호출할 수는 없지만 자식 객체가 생성될 때 super()를 호출해서 추상클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.

Phone이라는 추상클래스를 생성한다.


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("폰 전원을 끕니다.");
}
}


다음은 Phone추상클래스를 상속해서 SmartPhone 자식 클래스를 정의한다.

SmartPhone 클래스의 생성자를 보면 super(owner); 코드로 Phone의 생성자를 호출하고 있다.


public class SmartPhone extends Phone {
//생성자
public SmartPhone(String owner){
super(owner);
}
//메소드
public void internetSearch() {
System.out.println("인터넷 검색을 합니다.");
}
}


다음 PhoneExample클래스는 Phone의 생성자를 호출해서 객첼르 생성할 수 없음을 보여준다.

대신 자식 클래스인 SmartPhone으로 객체를 생성해서 Phone의 메소드인 turnOn(),turnOff() 메소드를 사용할 수 있음을 보여준다.


public class PhoneExample {
public static void main(String[] args) {
//Phone phone = new Phone();
SmartPhone smartPhone = new SmartPhone("홍길동");
smartPhone.turnOn();
smartPhone.internetSearch();
smartPhone.turnOff();
}
}


다음번엔 추상 메소드와 오버라이딩에 대해서 올려보도록하겠습니다.


댓글 0