모든 메서드가 추상 메서드로 이루어진 클래스
interface implements: 타입상속
class extends: 구현상속
package interfaceEX;
public interface Calc {
// 상수로 선언된다.
double PI = 3.14;
int ERROR = -999999999;
// 인터페이스 키워드 안에 선언되면 추상메서드가 된다.
int add(int num1, int num2);
int sub(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
}
package interfaceEX;
public class CompleteCalc implements Calc{
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
@Override
public int sub(int num1, int num2) {
return num1 + num2;
}
@Override
public int times(int num1, int num2) {
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
if (num2 != 0){
return num1 / num2;
}
return ERROR;
}
public void showInfo(){
System.out.println("Calc 인터페이스를 구현했습니다.");
}
}
package interfaceEX;
public class CalculatorTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
// Calculator, CompleteCalc 클래스로 가능
Calc calc = new CompleteCalc();
System.out.println(calc.add(num1, num2));
}
}
상수: 모든 변수는 상수
추상 메서드: 모든 메서드는 추상 메서드
디폴드 메서드: 기본 구현을 가지는 메서드, 구현 클래스에서 재정의 가능 (default ~)
정적 메서드: 인스턴스 생성과 상관없이 인터페이스 타입으로 사용가능한 메서드
private 메서드: 인터페이스를 구현한 클래스에서 사용, 재정의 불가, 인터페이스 내부에서만 기능제공
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 myMethod() {
}
@Override
public void x() {
}
@Override
public void y() {
}
}
// 인터페이스
public interface Queue{
void enQueue(String title);
String deQueue();
int getSize();
}
// 클래스
import java.util.ArrayList;
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();
}
}
// 클래스, 인터페이스 상속받은 클래스
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();
}
}