JAVA

[JAVA] 추상 클래스

개발 공주 2023. 6. 1. 15:53
728x90

추상 클래스란

📌 클래스가 설계도라면 추상 클래스는 미완성된 설계도입니다.

  • abstract 키워드를 사용하여 추상 클래스를 선언할 수 있습니다.
  • public abstract class 추상클래스명 { }
  • 추상 클래스는 추상 메서드를 포함할 수 있습니다.
    • 추상 메서드가 없어도 추상 클래스로 선언할 수 있습니다.
  • 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있습니다.
  • 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있습니다.
※ 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우 사용한다.

추상 메서드

📌 추상 메서드는 아직 구현되지 않은 미완성된 메서드입니다.

  • abstract 키워드를 사용하여 추상 메서드를 선언할 수 있습니다.
public abstract class 추상클래스명 {
		abstract 리턴타입 메서드이름(매개변수, ...);
}
  • 추상 메서드는 일반적인 메서드와는 다르게 블록{ }이 없습니다.
    • 즉, 정의만 할 뿐, 실행 내용은 가지고 있지 않습니다.

추상 클래스 상속

📌 추상 메서드는 extends 키워드를 사용하여 클래스에서 상속됩니다.

public class 클래스명 extends 추상클래스명 {
		@Override
    public 리턴타입 메서드이름(매개변수, ...) {
		       // 실행문
    }
}
  • 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 합니다.

예제 코드

Main 클래스

public class Main {
    public static void main(String[] args) {
        Car car1 = new BenzCar();
        car1.horn();
        System.out.println();

        Car car2 = new AudiCar();
        car2.horn();
        System.out.println();

        Car car3 = new ZenesisCar();
        car3.horn();
    }
}

Car 추상 클래스

public abstract class Car {
    String company; // 자동차 회사
    String color; // 자동차 색상
    double speed;  // 자동차 속도 , km/h

    public double gasPedal(double kmh) {
        speed = kmh;
        return speed;
    }

    public double brakePedal() {
        speed = 0;
        return speed;
    }

    public abstract void horn();
}

BenzCar, AudiCar, ZenesisCar 클래스

public class BenzCar extends Car {

    @Override
    public void horn() {
        System.out.println("Benz 빵빵");
    }
}


public class AudiCar extends Car {

    @Override
    public void horn() {
        System.out.println("Audi 빵빵");
    }
}

public class ZenesisCar extends Car {

    @Override
    public void horn() {
        System.out.println("Zenesis 빵빵");
    }
}

'JAVA' 카테고리의 다른 글

[JAVA] 디폴트 메서드와 static 메서드  (0) 2023.06.01
[JAVA] 인터페이스  (0) 2023.06.01
[JAVA] instanceof  (0) 2023.06.01
[JAVA] 다형성 (polymorphism)  (0) 2023.06.01
[JAVA] 참조변수의 타입변환  (0) 2023.06.01