[Java] 추상 클래스

김세림·2024년 4월 26일

Java

목록 보기
15/24
post-thumbnail

추상 클래스


추상클래스란?

추상클래스는 미완성된 설계도를 뜻한다.
부모클래스에서 메소드를 완성시키지않고 자식이 상속(extends)받아 완성시키는 것!
추상클래스는 추상 메소드를 포함할 수 있고, 추상 메소드가 없더라도 추상클래스로 선언할 수는 있다(추천하진않는다..)

상속은 부모클래스에 있는 것을 자식 클래스가 상속받아서 사용하는 느낌이라면
추상화는 자식클래스에 공통적으로 있는 메소드들을 모아 이름(규격)을 정해 부모클래스에 적어놓고, 구체화(오버라이딩)는 자식클래스에서 하는 것이다!

추상클래스 선언 방식

추상메소드는 일반적인 메소드와는 다르게 블록이 없이 abstract를 붙여 만든다.

public abstract class 추상클래스명 {
	abstract 리턴타입 메소드이름(매개변수...);
}

추상클래스는 extends키워드를 사용해서 자식클래스에 상속할 수 있으며, 위에 말한대로 구체화를 해야하므로 오버라이딩이 필수다!

예시코드

벤츠, 아우디, 제네시스에 페달을 밟거나 브레이크를 하는 부분은 동일하나 클락션 소리 부분이 다르다고 가정할 때 추상메소드는 어디가 될까?

당연히 클락션 부분일 것이다.
페달과 브레이크는 메소드 안의 내용까지 다 동일하니 일반 메소드로 만들어서 부모가 자식에서 상속시켜주는 방식으로 사용이 가능하고,
클락션 부분은 부모 클래스인 Car에서 선언(추상화)만 해놓고 자식클래스인 벤츠, 아우디, 제네시스에서 구체화(오버라이딩)해서 사용하면 된다.

//벤츠, 아우디, 제네시스는 horn()의 sout부분만 조금 다르니 벤츠만 작성함.
//벤츠class 
public class BenzCar extends Car {

    @Override
    public void horn() {
        System.out.println("Benz 빵빵");
    }
}
//Car class
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();
}
//Main class
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();
    }
} //각자의 차가 가지는 horn을 출력한다.

0개의 댓글