반응형

추상 클래스의 특징

1. 추상 메소드를 하나라도 가진 클래스입니다.

여기서 추상 메소드란 메소드의 선언부만 존재하고, 구현부는 없는 메소드입니다.

2. 클래스이기 때문에 변수를 가질 수 있습니다.

3. 추상 클래스를 extends 한 클래스가 추상 메소드를 구현하도록 강제합니다.

4. 추상 메소드에 필수적으로 abstract 예약어를 작성해야 합니다.

자바에서 추상 메소드는 다음과 같이 작성합니다.

abstract 반환형 메소드명();

5. 추상 클래스는 인스턴스를 생성할 수 없습니다.

6. 구현 클래스에서는 extends 예약어를 사용합니다.


자바에서 추상 클래스를 사용하는 목적

중복되는 부분이나 공통적인 부분은 공통 메소드를 사용하고,

구현 클래스에 따라 메소드의 동작 방식의 변경이 필요한 경우에는 공통의 메소드를 오버라이딩하여 사용함으로서 아래의 이점을 얻을 수 있습니다.

 

1. 생산성의 향상을 도모

2. 연관된 일련의 클래스들에 대해 공통적인 규약을 정의

 

아래의 코드는 그 목적에 맞게 추상 클래스를 이용한 코드입니다.

public abstract class Animal {
    private final String name;
    private final int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void information() {
        System.out.println("이름은 " + name);
        System.out.println("나이는 " + age);
    }
    abstract void cry();
}

public class Dog extends Animal{

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    void cry() {
        System.out.println("멍멍");
    }
}

public class Cat extends Animal{

    public Cat(String name, int age) {
        super(name, age);
    }

    @Override
    void cry() {
        System.out.println("야옹");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog("Park", 11);
        Animal cat = new Cat("Han", 10);

        dog.information();
        cat.information();

        dog.cry();
        cat.cry();
    }
}

 

결과값은 다음과 같습니다.

이름은 Park
나이는 11
이름은 Han
나이는 10
멍멍
야옹

추상 클래스는 말 그대로 인스턴스를 생성할 수 없습니다.

아래의 코드와 같이 익명 클래스를 구현해서 사용하는 방법 밖에는 없습니다.

Animal animal = new Animal() {
            @Override
            public void cry() {
                System.out.println("익명 클래스");
            }
        };

 

이상입니다.

 

오늘도 좋은 하루 보내세요.

감사합니다.

반응형

'JAVA > 기본 개념' 카테고리의 다른 글

#11 Optional  (0) 2022.09.05
#10 열거형(Enum)  (0) 2022.08.31
#8 Object 클래스  (0) 2022.08.23
#4 예외처리(Exception Handling)  (0) 2022.08.22
#3 인터페이스  (0) 2022.08.22

+ Recent posts