클래스가 설계도라면 추상 클래스는 미완성된 설계도라고 생각하면 쉽다.
모호하게 만드는 클래스 !! ➡️ 추상화
abstract
키워드를 사용하여 추상 클래스를 선언한다.
public abstract class 추상클래스명 {
}
추상 메서드는 아직 구현되지 않은 미완성 메서드이다 !
abstract
키워드를 사용하여 추상 메서드를 선언한다.
public abstract class 추상클래스명 {
abstract 리턴타입 메서드이름(매개변수, ...); // 구현부분이 없다.
}
추상 메서드는 일반적인 메서드와는 다르게
{}
안에 내용이 없다. 정의만 할 뿐, 실행 내용은 가지고 있지 않다.
추상 메서드는 extends 키워드를 사용하여 클래스에서 상속된다.
public class 클래스명 extends 추상클래스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
}
}
상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 한다 !
클래스들의 공통적인 필드와 메서드를 추출한다.
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 빵빵빵");
}
}
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 빵빵빵");
}
}