기울어진 글씨는 모두 추상 메서드/클래스
Computer.java
public abstract class Computer {
public abstract void display(); //추상 메서드
public abstract void typing(); //추상 메서드
public void turnOn(){
System.out.println("전원을 켭니다");
}
public void turnOff(){
System.out.println("전원을 끕니다");
}
}
NoteBook.java
public abstract class NoteBook extends Computer{
@Override
public void display() {
System.out.println("NoteBook display"); //추상 메서드1 구현부
}
//상위에서 추상 메서드를 모두 상속하지 않으면 그 클래스는 추상 클래스가 된다
}
MyNoteBook.java
public class MyNoteBook extends NoteBook{
@Override
public void typing() {
System.out.println("MyNoteBook typing"); //추상 메서드2 구현부
}
}
public abstract class Car {
public abstract void drive();
public abstract void stop();
public abstract void wiper();
public void startCar(){
System.out.println("시동을 켭니다");
}
public void turnOff(){
System.out.println("시동을 끕니다");
}
public void washCar(){} //구현을 하지 않았지만 추상 메서드가 아니다.
필요한 경우 하위 클래스에서 재정의하여 사용하는 메서드
final public void run(){
startCar();
drive();
wiper();
stop();
turnOff();
washCar();
} // 정해진 시나리오
}
AICar.java
public class AICar extends Car {
@Override
public void drive() {
System.out.println("자율 주행을 합니다");
System.out.println("자동차가 스스로 방향을 바꿉니다");
}
@Override
public void stop() {
System.out.println("장애물 앞에서 스스로 멈춥니다");
}
@Override
public void wiper() {
}
@Override
public void washCar() {
System.out.println("자동 세차를 합니다");
} // 추상메서드는 아니지만 상위 클래스에서 정의된 메서드를 재정의한 메서드다
}
ManualCar
public class ManualCar extends Car{
@Override
public void drive() {
System.out.println("사람이 운전합니다");
System.out.println("사람이 핸들을 조작합니다");
}
@Override
public void stop() {
System.out.println("장애물 앞에서 브레이크를 밟아서 정지합니다");
}
@Override
public void wiper() {
}
}
Calc.java
public interface Calc {
double PI = 3.14;
int ERROR = -999999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
}
Calculator.java
public abstract class Calculator implements Calc{
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
@Override
public int substract(int num1, int num2) {
return num1 - num2;
}
}
CompleteCalc.java
public class CompleteCalc extends Calculator{
@Override
public int times(int num1, int num2) {
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
if (num2 == 0)
return ERROR;
return num1/num2;
}
public void showInfo(){
System.out.println("모두 구현했습니다");
}
}
CalculatorTest.java
public class CalculatorTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 2;
CompleteCalc ccalc = new CompleteCalc();
// Calc calc = new CompleteCalc(); // Calc 인터페이스에서 정의된 메서드만 사용 가능
System.out.println(ccalc.add(num1,num2));
System.out.println(ccalc.substract(num1,num2));
System.out.println(ccalc.times(num1,num2));
System.out.println(ccalc.divide(num1,num2));
ccalc.showInfo();
}
}