추상클래스란 뼈대(공통기능)를 만들어놓고 복제를 하는것, 마을에 집객체을 여러채 지어야한다. 집은 아파트객체을 지어도 되고, 초가집객체을 지어도 된다. 하지만 집객체을 만들때 일일히 처음부터 설계하고
할 필요없이 집의 공통기능 즉 지붕이있고 벽이 있는건 똑같기 때문에 집 추상클래스를 만들어서 공통된 뼈대를 만들어준다
abstract class House{
private String roof = "House roof";
private String wall = "House wall";
private Door door;
abstract void 난방();
void setDoor(Door door){
this.door=door;
}
Door getDoor(){
return door;
}
void openDoor(){
System.out.println("Basic door opened");
}
void closeDoor() {
System.out.println("Basic door closed");
}
}
class 초갓집 extends House{
@Override
void 난방() {
System.out.println("아궁이");
}
@Override
void openDoor(){
getDoor().openDoor();
}
@Override
void closeDoor() {
getDoor().closeDoor();
}
}
초갓집 객체를 만들때 난방을 구현하지않으면 오류가 생긴다. 그래서 초갓집은 아궁이로 강제 구현해주었다.
우리가 설계도만 있으면 어떤것도 만들수있듯이 인터페이스는 설계도를 만들어주는것이다. 만약 문 인터페이스가 있으면 집객체에 창문이라는 인터페이스를 콱 박아놓고 규격에만 맞게 나무문을 쓰든 철문을 쓰든 갈아 끼우기만 하면된다.
interface Door {
void openDoor();
void closeDoor();
}
class 철문 implements Door{
@Override
public void openDoor() {
System.out.println("철문 열었음");
}
@Override
public void closeDoor() {
System.out.println("철문 닫음");
}
}
문 설계도에 문은 열고 닫는게 있어야된다고 나와있다. implements 키워드를 통해 철문클래스에서 구현을 해준다.
interface Lockable {
void Lock();
}
interface Bellable{
void Bell();
}
interface Door extends Lock,Bell{
void openDoor();
void closeDoor();
}
잠그는 기능이랑 초인종을 추가해주었으니 다시 구현해주자
class 철문 implements Door{
@Override
public void Lock() {
System.out.println("도어락으로 잠금");
}
@Override
public void Bell() {
System.out.println("딩동");
}
@Override
public void openDoor() {
System.out.println("철문 열었음");
}
@Override
public void closeDoor() {
System.out.println("철문 닫음");
}
}
다중상속이 가능한 이유: 클래스를 다중상속하면 상속받은 입장에서 누구의 메소드를 써야할지 모르는데 인터페이스는 설계도이기때문에 다시 구현하면 끝이다.