Cracking Code

[Java] 추상 클래스 (Abstract class) 본문

Java/Java language

[Java] 추상 클래스 (Abstract class)

CrackCo 2020. 8. 25. 19:51
추상 클래스란 하나 이상의 추상 메서드를 포함하는 클래스입니다.

추상 클래스

객체 지향의 특징인 재사용성 및 유지 보수성을 향상 시키기 위해

하위 클래스가 반드기 부모 클래스의 메소드를 사용하게끔 강제할 필요성이 등장합니다.

추상 클래스는 추상 메서드를 하나 이상 포함하고 있으며

추상 메서드는 반드시 하위 클래스에서 오버라이딩해야 합니다.

public abstract class class_name { // 추상 클래스
    public abstract void method_name(); // 추상 메서드
}

추상 메서드는 함수의 body 없이 선언만 하여야 합니다.

그리고 추상 메서드와 추상 클래스를 선언할 때는 abstract 키워드를 사용합니다.

 

추상 클래스의 특징

1. 미완성 클래스

2. 구성요소

  • 인스턴스 변수
  • 일반 메서드
  • 생성자
  • 추상 메서드

추상 메서드를 포함하고 있기에 객체 생성을 할 수 없습니다.

추상 클래스를 사용하기 위해선 일반 클래스로 상속 받아 추상 메서드를 오버라이딩해야 합니다.

강제성과 통일성을 제공합니다.

 

E.g.

// Person.java
public abstract class Person {
    private int age;
    private String name;

    public Person() {
    }

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

    public abstract void printInfo();

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

// Man.java
public class Man extends Person {
    public Man() {
    }

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

    @Override
    public void printInfo() {
        System.out.println(super.getName() + " " + super.getAge());
    }
}

// Main.java
public class Main {
    public static void main(String[] args) {
        Man man = new Man(10, "Crackco");
        man.printInfo();
    }
}

// 실행 결과
Crackco 10

추상 클래스 Person 을 상속 받는 Man 클래스는 printInfo() 메서드를 반드시 오버라이딩해야 합니다.

만약 Man 클래스에서 printInfo() 메서드를 정의하지 않을 경우 컴파일 오류가 발생하게 됩니다.

오버라이딩 메소드를 정의할 때는 @Override 키워드를 명시하여 구분해주는 것이 좋습니다.

이렇게 Man 클래스는 printInfo() 메서드를 사용해야 한다는 강제성을 부여받게 됩니다.

'Java > Java language' 카테고리의 다른 글

[Java] 인터페이스 (Interface)  (0) 2020.08.27
[Java] 다형성 (Polymorphism)  (0) 2020.08.25
[Java] 메서드 오버라이딩 (Method Overriding)  (0) 2020.08.13
[Java] 상속 (Inheritance)  (0) 2020.08.12
[Java] this 키워드  (0) 2020.08.09
Comments