728x90
반응형
추상 클래스는 인터페이스와 마찬가지로 하위 클래스를 구현 되어야 하는 기능을 선언하여 상속 받는 하위 클래스가 구현하도록 하지만 인터페이스보다 느슨한 추상화를 제공한다.
인터페이슨느 상수와 추상 메서드만을 포함하지만
추상 클래스는 구현된 메서드와 멤버변수를 포함할 수 있기 때문이다.
1. Main 클래스
public class Main {
public static void main(String[] args) {
// VendingMachineControl vmc = new CoffeeMachine();
// vmc.on();
// vmc.insertMoney();
// vmc = new CarMachine()
// useVM(new vmc);
// vmc = new CarMachine();
useVM(new CoffeeMachine()); // VendingMachineControl vmc=new CoffeeMachine()
useVM(new CarMachine()); // VendingMachineControl vmc=new CarMachine()
useVM(new CoffeeMachine_v2()); // VendingMachineControl vmc=new CoffeeMachine_v2()
useVM(new CarMachine_v2());
useVM(new VMA() { // 클래스 없이(로컬 클래스:함수 내에서 사용하는 클래스) 특별히 여기서만 사용할 방식
@Override
public void insertMoney() {
System.out.println("Money");
}
@Override
public void returnItem() {
System.out.println("토끼인형");
}
});
}
public static void useVM(VendingMachineControl vmc) {
vmc.on();
vmc.off();
vmc.insertMoney();
vmc.returnItem();
}
}
2. Interface
interface VendingMachineControl {
void on();
void off();
void insertMoney();
void returnItem();
}
3. 하위 클래스와 추상클래스(abstract)
class CoffeeMachine implements VendingMachineControl {
@Override
public void on() {
System.out.println("on");
}
@Override
public void off() {
System.out.println("off");
}
@Override
public void insertMoney() {
System.out.println("Coin");
}
@Override
public void returnItem() {
System.out.println("Coffee");
}
}
class CarMachine implements VendingMachineControl {
@Override
public void on() {
System.out.println("on");
}
@Override
public void off() {
System.out.println("off");
}
@Override
public void insertMoney() {
System.out.println("Card");
}
@Override
public void returnItem() {
System.out.println("Car");
}
}
abstract class VMA implements VendingMachineControl {
public void on() {
System.out.println("on");
}
public void off() {
System.out.println("off");
}
public abstract void insertMoney();
public abstract void returnItem();
}
class CoffeeMachine_v2 extends VMA { // class와 class 사이여서 extends 사용
@Override
public void insertMoney() {
System.out.println("Coin");
}
@Override
public void returnItem() {
System.out.println("Americano");
}
}
class CarMachine_v2 extends VMA {
@Override
public void insertMoney() {
System.out.println("Card");
}
@Override
public void returnItem() {
System.out.println("Car");
}
}
- 전체 코딩
public class Main {
public static void main(String[] args) {
// VendingMachineControl vmc = new CoffeeMachine();
// vmc.on();
// vmc.insertMoney();
// vmc = new CarMachine()
// useVM(new vmc);
// vmc = new CarMachine();
useVM(new CoffeeMachine()); // VendingMachineControl vmc=new CoffeeMachine()
useVM(new CarMachine()); // VendingMachineControl vmc=new CarMachine()
useVM(new CoffeeMachine_v2()); // VendingMachineControl vmc=new CoffeeMachine_v2()
useVM(new CarMachine_v2());
useVM(new VMA() { // 클래스 없이(로컬 클래스:함수 내에서 사용하는 클래스) 특별히 여기서만 사용할 방식
@Override
public void insertMoney() {
System.out.println("Money");
}
@Override
public void returnItem() {
System.out.println("토끼인형");
}
});
}
public static void useVM(VendingMachineControl vmc) {
vmc.on();
vmc.off();
vmc.insertMoney();
vmc.returnItem();
}
}
interface VendingMachineControl {
void on();
void off();
void insertMoney();
void returnItem();
}
class CoffeeMachine implements VendingMachineControl {
@Override
public void on() {
System.out.println("on");
}
@Override
public void off() {
System.out.println("off");
}
@Override
public void insertMoney() {
System.out.println("Coin");
}
@Override
public void returnItem() {
System.out.println("Coffee");
}
}
class CarMachine implements VendingMachineControl {
@Override
public void on() {
System.out.println("on");
}
@Override
public void off() {
System.out.println("off");
}
@Override
public void insertMoney() {
System.out.println("Card");
}
@Override
public void returnItem() {
System.out.println("Car");
}
}
abstract class VMA implements VendingMachineControl {
public void on() {
System.out.println("on");
}
public void off() {
System.out.println("off");
}
public abstract void insertMoney();
public abstract void returnItem();
}
class CoffeeMachine_v2 extends VMA { // class와 class 사이여서 extends 사용
@Override
public void insertMoney() {
System.out.println("Coin");
}
@Override
public void returnItem() {
System.out.println("Americano");
}
}
class CarMachine_v2 extends VMA {
@Override
public void insertMoney() {
System.out.println("Card");
}
@Override
public void returnItem() {
System.out.println("Car");
}
}
728x90
반응형
'즐거운프로그래밍' 카테고리의 다른 글
[자바] GUI 프로그램 기본 구조 예제 (1) | 2023.10.23 |
---|---|
[자바] GUI 프로그램 기본 구조 (0) | 2023.10.23 |
[자바] 겹치지 않는 랜덤 숫자 뽑아내기(Random) (0) | 2023.10.23 |
[자바] Vector 클래스 예제 (0) | 2023.10.23 |
[자바] 인터페이스의 구현(interface) (1) | 2023.10.23 |