본문 바로가기
프로그래밍 언어/java

[java] 인터페이스 다중 상속

by m2162003 2021. 3. 12.

인터페이스 multiple inheritance

자바는 클래스에 대해선 single inheritance를 지원한다. (c++은 다중상속 지원함)

이에 대한 이유는 Diamond Problem때문인데 나중에 따로 정리해보도록 한다.

 

하지만 인터페이스는 다중 상속이 지원되며

인터페이스끼리도 다중 상속이 가능하다.

 

클래스 extends 클래스 : 가능

클래스 extends 클래스, 클래스 : 불가능

클래스 implements 인터페이스, 인터페이스: 가능

 

인터페이스 extends 인터페이스: 가능

인터페이스 extends 인터페이스, 인터페이스 : 가능

 

++ 참고) 

인터페이스 extends 클래스 : 불가능

인터페이스 implements 인터페이스 : 불가능

 

클래스 implements 인터페이스1,2

 

 

인터페이스 간 상속

인터페이스 extends 인터페이스1,2

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

댓글