[Java] 추상 클래스

CountryGirl·2023년 6월 12일
0

Java

목록 보기
13/18
post-thumbnail

📌 추상 클래스

클래스가 설계도라면 추상 클래스는 미완성된 설계도라고 생각하면 쉽다.

  • 추상 클래스는 추상 메서드를 포함할 수 있다.
    - 추상 메서드가 없어도 추상 클래스로 선언할 수 있다.
  • ✅ 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있다.
  • 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있다.

모호하게 만드는 클래스 !! ➡️ 추상화

abstract 키워드를 사용하여 추상 클래스를 선언한다.

public abstract class 추상클래스명 {

}

😎 추상 메서드

추상 메서드는 아직 구현되지 않은 미완성 메서드이다 !

abstract 키워드를 사용하여 추상 메서드를 선언한다.

public abstract class 추상클래스명 {
	abstract 리턴타입 메서드이름(매개변수, ...);		// 구현부분이 없다.
}

추상 메서드는 일반적인 메서드와는 다르게 {} 안에 내용이 없다. 정의만 할 뿐, 실행 내용은 가지고 있지 않다.


😎 추상 클래스 상속

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

public class 클래스명 extends 추상클래스명 {
	
    @Override
    public 리턴타입 메서드이름(매개변수, ...) {
    
    }
}

상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 한다 !

인터페이스 (interface) 와 다른 점 (강제적인 부분)

  • 추상메서드 ➡️ 반드시 Overriding (O)
  • 인터페이스 ➡️ 반드시 Overriding (X)

😎 어떻게 쓰는가 ?

클래스들의 공통적인 필드와 메서드를 추출한다.

추상메서드 사용 前

public class carSantaFe { 
    double speed;

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

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

    public void horn() {
        System.out.println("SantaFe 빵빵");
    }
}
public class carK7 { 
    double speed;

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

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

    public void horn() {
        System.out.println("K7 빵~");
    }
}
public class carGV80 { 
    double speed;

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

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

    public void horn() {
        System.out.println("GV80 빵빵빵");
    }
}
  • carSantaFe
  • carK7
  • carGV80
    3개 클래스 모두 gasPedal(), brakePedal(), horn() 을 공통적으로 가지고 있다.

이 3가지를 모두 추상화 해볼까?
아니 !! 자세히 보면 메서드gasPedal, brakePedal 은 같다.
메서드 horn 를 공통적으로 가지고 있지만 안에 내용은 다르다.

gasPedal(), brakePedal() 는 무조건 정해져 있는 (변하지 않는) 메서드이므로 일반 메서드로 정의를 하고 horn()만 추상메서드로 정의하여 Overriding 하여 사용한다 !


추상메서드 사용 後

public abstract class Car {
    String company; // 자동차 회사 : GENESIS
    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();			// 추상 메서드
}
public class carSantaFe extends Car {
	@Override
    public void horn(){
    	System.out.println("SantaFe 빵빵");
    }
}
----------------------------------------------------
public class carSantaFe extends Car {
	@Override
    public void horn(){
    	System.out.println("K7 빵~);
    }
}  
----------------------------------------------------
public class carSantaFe extends Car {
	@Override
    public void horn(){
    	System.out.println("GV80 빵빵빵");
    }
}   
profile
💻🌾시골소녀의 엉망징창 개발 성장일지🌾💻 (2023.05.23 ~)

0개의 댓글

관련 채용 정보