추상 클래스
- 클래스가 설계도라면 추상 클래스는 미완성된 설계도
abstract 키워드를 사용하여 추상 클래스를 선언
- 추상 클래스는 추상 메서드를 포함 가능
- 추상 메서드가 없어도 추상 클래스로 선언 가능
- 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있다.
- 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있다.
선언 방법
public abstract class 추상클래스명 {
}
추상 메서드
- 추상 메서드는 아직 구현되지 않은 미완성된 메서드
abstract 키워드를 사용하여 추상 메서드를 선언
- 추상 메서드는 일반적인 메서드와는 다르게 블록{ }이 없다.
선언 방법
public abstract class 추상클래스명 {
abstract 리턴타입 메서드이름(매개변수, ...);
}
추상 클래스 상속
- 추상 메서드는
extends 키워드를 사용하여 클래스에서 상속
- 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시 오버라이딩 되어야 한다.
선언 방법
public class 클래스명 extends 추상클래스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
예시
- BenzCar, AudiCar, ZenesisCar 는 horn() 메서드의 내용에 차이가 존재
- 따라서 horn() 메서드를 추상 메서드로 선언하여 자식 클래스에서 재정의 될 수 있도록 함.
BenzCar : 자식클래스
public class BenzCar {
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 void horn() {
System.out.println("Benz 빵빵");
}
}
AudiCar : 자식클래스
public class AudiCar {
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 void horn() {
System.out.println("Audi 빵빵");
}
}
ZenesisCar : 자식클래스
public class ZenesisCar {
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 void horn() {
System.out.println("Zenesis 빵빵");
}
}
Car : 부모클래스
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();
}
정리하기
추상 클래스
- 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해 만든 미완성 클래스
추상 메서드
- 상속을 통해서 완성되는 아직 구현되지 않은 미완성 메서드
추상 클래스 상속
- 추상 클래스를 상속할 경우 추상 메서드는 반드시 오버라이딩이 되어야 한다