abstract class 추상클래스 {
/* 이 메서드는 무엇을 한다 */
abstract Something somesome();
int a; //인스턴스 변수
static int b; // 클래스 변수
static void method1(){System.out.println("abcdefg");}
void method2(){
int method2LV; //지역 변수
}
abstract void method3(); //추상 메서드
}
미완성 상태로 남겨두는 이유?
메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 실제 내용은 상속받는 클래스에서 구현하도록 비워두는 것이다.
public interface InterfaceClass {
// int a; //인스턴스 변수를 갖는게 불가능하다.
// static int b; //클래스 변수를 갖는게 불가능하다.
// void method2(){ //인스턴스 메서드를 가질 수 없다.
// int method2LV;
// }
int A = 1; //상수는 가질 수 있다. == public static final int A = 1;
void method3();// 추상 메서드를 가질 수 있다. == public abstract final void method3();
static void method1(){System.out.println("abcdefg");}// 클래스 메서드도 가질 수 있다!
default void method5(){System.out.println("abcdefg");} //디폴트 메서드도 가질 수 있다!
}
interface Eatable {
public abstract void eat(String name);
}
class EatBurger implements Eatable {
@Override
public void eat(String name) {
System.out.println("burger!");
}
}
class EatPizza implements Eatable {
@Override
public void eat(String name) {
System.out.println("pizza!");
}
}
class EatMachine {
public static Eatable eat(String name) {
if (name.equals("burger")) {
return new EatBurger();
} else {
return new EatPizza();
}
}
}
class EatTest{
public static void main(String args[]){
Eatable eater = EatMachine.eat("burger");
eater.eat("burger"); //burger!
Eatable eater2 = EatMachine.eat("pizza");
eater2.eat("pizza"); //pizza!
}
}
인터페이스
- 서로 관계 없는 클래스( 상속관계도 없고, 같은 조상 클래스를 가지고 있지도 않음 )에게 하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어줄 수 있다.
추상클래스
- 서로 동일한 조상 클래스를 상속하는데 자손들 모두 완벽히 똑같은 기능을 필요로 할 때