Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자 도전기

[JAVA] 상속 - 추상 클래스 본문

개발공부/JAVA

[JAVA] 상속 - 추상 클래스

jnnjnn 2024. 3. 8. 17:21

사전적 의미로 추상이란 실체 간의 공통되는 특성을 추출한 것을 말한다. 예를 들어 새, 곤충, 물고기 등의 공통점은 동물이다. 여기서 동물은 실체들의 공통된 특성을 가지고 있지만 실체가 아닌 추상적인 개념이다.

 

추상 클래스란?

객체를 생성할 수 있는 클래스를 실체 클래스라고 한다면, 이 클래스들의 공통적인 필드나 메소드를 추출해서 선언한 클래스를 추상 클래스라고 한다, 추상 클래스는 실체 클래스의 부모 역할을 한다. 따라서 실체 클래스는 추상 클래스를 상속해서 공통적인 필드나 메소드를 물려받을 수 있다.

 

- 추상 클래스는 new 연산자를 사용해서 객체를 직접 생성할 수 없다

- 추상 클래스는 실체 클래스를 만들기 위한 부모로만 사용된다

 

추상 클래스 선언

클래스 선언에 abstract 키워드를 붙인다

public abstract class 클래스명{

}

 

추상 클래스도 필드, 메소드를 선언할 수 있다. 그리고 자식 객체가 생성될 때 super()로 추상 클래스의 생성자가 호출되기 때문에 생성자도 반드시 있어야 한다 (일반적으로 기본생성자가 생성된다) 

abstract class Phone {
    String owner;

    Phone(String owner) {
        this.owner = owner;
    }

    void turnOn() {
        System.out.println("폰 전원을 켭니다");
    }

    void turnOff() {
        System.out.println("폰 전원을 끕니다");
    }
}

class SmartPhone extends Phone {
    SmartPhone(String owner) {
        super(owner);
    }

    void internetSearch() {
        System.out.println("인터넷 검색을 합니다");
    }
}


public class PhoneExample {
    public static void main(String[] args) {
        SmartPhone smartPhone = new SmartPhone("홍길동");

        smartPhone.turnOn(); // 폰 전원을 켭니다
        smartPhone.internetSearch(); // 인터넷 검색을 합니다
        smartPhone.turnOff(); // 폰 전원을 끕니다
    }
}

 

 

추상 메소드와 재정의

자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 작성할 때, 추상 메소드는 메소드 실행 내용({} 중괄호)를 가질 필요가 없다. 추상 메소드는 실행 내용이 없기 때문에, 추상 메소드를 가진 클래스는 추상 클래스로 정의되어야 한다.

// abstract 리턴타입 메소드명 (매개변수);

public abstract class Animal {
	abstract void sound();
}

 

 

추상 메소드는 반드시 자식 클래스에서 오버라이딩해서 실행 내용을 채워야 한다. 만약 자식 클래스가 추상 메소드를 재정의하지 않았다면 자식 클래스도 추상 클래스가 된다.

 

 

'개발공부 > JAVA' 카테고리의 다른 글

[JAVA] 상속 - 클래스와 메소드의 final 키워드  (0) 2024.03.08
[JAVA] 상속 - super 키워드  (2) 2024.03.08
[JAVA] 상속  (0) 2024.03.07
[JAVA] Getter와 Setter  (3) 2024.03.06
[JAVA] 접근 제한자(Access Modifier)  (0) 2024.03.06