

Buy.java(인터페이스)
package ch15;
public interface Buy {
void buy();
}
Sell.java(인터페이스)
package ch15;
public interface Sell {
void sell();
}
Customer.java
package ch15;
public class Customer implements Buy, Sell{
@Override
public void sell() {
System.out.println("Customer sell");
}
@Override
public void buy() {
System.out.println("Customer buy");
}
public void sayHello() {
System.out.println("Hello");
}
}
CustomerTest.java
package ch15;
public class CustomerTest {
public static void main(String[] args) {
Customer customer = new Customer();
customer.buy();
customer.sell();
customer.sayHello();
Buy buyer = customer;
buyer.buy();
Sell seller = customer;
seller.sell();
}
}
구현 코드를 가지고 인스턴스 생성된 경우만 호출되는 디폴트 메서드의 경우 두 개의 인터페이스에서 중복되면 구현하는 클래스에서 반드시 재정의를 해야함
Sell.java
public interface Sell {
void sell();
default void order() {
System.out.println("판매 주문");
}
}
Buy.java
public interface Buy {
void buy();
default void order() {
System.out.println("구매 주문");
}
}
Customer.java
public class Customer implements Buy, Sell{
@Override
public void sell() {
System.out.println("customer sell");
}
@Override
public void buy() {
System.out.println("customer buy");
}
public void sayHello() {
System.out.println("Hello");
}
@Override
public void order() {
System.out.println("customer order");
}
}
`CustomerTest.java`
```java
public class CustomerTest {
public static void main(String[] args) {
Customer customer = new Customer();
customer.buy();
customer.sell();
customer.sayHello();
Buy buyer = customer;
buyer.buy();
Sell seller = customer;
seller.sell();
buyer.order();
seller.order();
}
}
extends 키워드를 사용
X.java
public interface X {
void x();
}
Y.java
public interface Y {
void y();
}
MyInterface.java
public interface MyInterface extends X, Y{
void myMethod();
}
MyClass.java
public class MyClass implements MyInterface{
@Override
public void x() {
System.out.println("x()");
}
@Override
public void y() {
System.out.println("y()");
}
@Override
public void myMethod() {
System.out.println("myMethod()");
}
}
MyClassTest.Java
public class MyClassTest {
public static void main(String[] args) {
MyClass mClass = new MyClass();
X xClass = mClass;
xClass.x();
Y yClass = mClass;
yClass.y();
MyClass iClass = mClass;
iClass.x();
iClass.y();
iClass.myMethod();
}
}

Shelf.java
public class Shelf {
protected ArrayList<String> shelf;
public Shelf() {
shelf = new ArrayList<String>();
} // 생성자의 역할중 하나가 멤버변수를 초기화 하는것
public ArrayList<String> getShelf(){
return shelf;
}
public int getCount() {
return shelf.size(); //ArrayList에는 size()가 적용된다
}
}
Queue.java
public interface Queue {
void enQueue(String title); //ArrayList에 넣는 메소드
String deQueue(); // 배열에서 하나씩 빼내는것
int getSize();
}
bookShelf
public class BookShelf extends Shelf implements Queue{
@Override
public void enQueue(String title) {
shelf.add(title);
}
@Override
public String deQueue() {
return shelf.remove(0);
}
@Override
public int getSize() {
return getCount();
}
}
BookShelfTest
public class BookShelfTest {
public static void main(String[] args) {
Queue bookQueue = new BookShelf();
bookQueue.enQueue("태백산맥1");
bookQueue.enQueue("태백산맥2");
bookQueue.enQueue("태백산맥3");
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());
}
}
//======> 출력 결과 <=========
태백산맥1
태백산맥2
태백산맥3