인터페이스 multiple inheritance
자바는 클래스에 대해선 single inheritance를 지원한다. (c++은 다중상속 지원함)
이에 대한 이유는 Diamond Problem때문인데 나중에 따로 정리해보도록 한다.
하지만 인터페이스는 다중 상속이 지원되며
인터페이스끼리도 다중 상속이 가능하다.
클래스 extends 클래스 : 가능
클래스 extends 클래스, 클래스 : 불가능
클래스 implements 인터페이스, 인터페이스: 가능
인터페이스 extends 인터페이스: 가능
인터페이스 extends 인터페이스, 인터페이스 : 가능
++ 참고)
인터페이스 extends 클래스 : 불가능
인터페이스 implements 인터페이스 : 불가능
인터페이스 간 상속
public interface X {
void x();
}
public interface Y {
void y();
}
public interface MyInterface extends X, Y {
void myMethod();
}
public class MyClass implements MyInterface {
@Override
public void x() {
}
@Override
public void y() {
}
@Override
public void myMethod() {
}
}
인터페이스와 클래스 동시 상속
역시 가능하며 많이 사용되는 형태이다.
public interface Queue {
void enque(String book);
String deque();
int getSize();
}
public class Shelf {
protected List<String> shelf;
public Shelf() {
shelf = new ArrayList<String>();
}
int getCount() {
return shelf.size();
}
}
public class BookShelf extends Shelf implements Queue {
@Override
public void enque(String book) {
this.shelf.add(book);
}
@Override
public String deque() {
return shelf.remove(0);
}
@Override
public int getSize() {
return getCount();
}
}
public class ShelfTest {
public static void main(String[] args) {
Queue bookQ = new BookShelf();
bookQ.enque("어린왕자");
bookQ.enque("광장");
while (bookQ.getSize() > 0)
System.out.println(bookQ.deque());
}
}
참고) for(i=0; i<bookQ.getSize(); i++)하면 어린왕자만 출력된다. getSize가 계속 변동되기 때문
'프로그래밍 언어 > java' 카테고리의 다른 글
[java] String, Wrapper 클래스 (0) | 2021.03.18 |
---|---|
[java] Object 클래스 (0) | 2021.03.18 |
[java] 인터페이스 (0) | 2021.03.12 |
[java] final, 템플릿 메서드 (0) | 2021.03.11 |
[java] 추상클래스 (0) | 2021.03.11 |
댓글