컨셉: 인터페이스는 "할 수 있는 것(능력)"에 초점
수행 , 기능 , 동작 (같은말) 정의 구현은 알아서
EX) 어떤문을 사용해야될까? 파란문 빨간문? ,도어락 달린문 ?
왜? 만들어 졌지? 다중상속 문제 해결 , 타입 사용 유연하게!
집을 복제해서 만들 때 ? 각 각의 집에 문을 설치할 때 어떤 인터페이스를 사용 할까 선택
package com.dev.study.item20.youtube;
abstract public class House {
private String roof = "house roof";
private String wall = "house wall";
private Door door;
void setDoor(Door door){
this.door = door;
}
Door getDoor(){
return door;
}
void openDoor(){
System.out.println("Basic door opend");
}
void closeDoor(){
System.out.println("Basic door closed");
}
}
interface Door{
void openDoor();
void closeDoor();
}
class BasicHouse extends House{
}
class MyHouse extends House{
@Override
void openDoor(){
getDoor().openDoor();
}
@Override
void closeDoor(){
getDoor().closeDoor();
}
}
class myDoor implements Door{
@Override
public void openDoor() {
System.out.println("my door opend");
}
@Override
public void closeDoor() {
System.out.println("my door closed");
}
}
class Abstract{
public static void main(String[] args){
House basicHouse = new BasicHouse();
basicHouse.openDoor();
basicHouse.closeDoor();
House myHouse = new MyHouse();
Door myDoor = new myDoor();
myHouse.setDoor(myDoor);
myHouse.openDoor();
myHouse.closeDoor();
}
}
interface Door{
String test = "test";
default void defaultMethod(){
System.out.println("defaul method");
}
// 추상메서드
void openDoor();
void closeDoor();
}
class myDoor implements Door{
@Override
public void defaultMethod() {
Door.super.defaultMethod();
}
@Override
public void openDoor() {
System.out.println(test);
System.out.println("my door opend");
}
@Override
public void closeDoor() {
System.out.println("my door closed");
}
}