abstract(추상) 클래스
– 하나 이상의 abstract 메소드(미완성 메소드)를 가진 클래스
– 인스턴스 생성을 불가 (컴파일 에러)
– 참조변수 생성과 오버라이딩이 가능

public class Test {
public static void main(String[] args) {
// AA aa = new AA(); // 컴파일 에러
AA aa = new BB();
aa.aa();
}
}
abstract class AA{
abstract void aa();
}
class BB extends AA{
void aa(){
System.out.println("오버라이딩");
}
}
interface
– 모든 메소드가 abstract 메소드인 클래스는 인터페이스로 정의한다.
– 두 결과물의 연결고리가 되는 일종의 규약
– 인터페이스에 정의된 메소드는 public abstract로 선언된다.
– 인터페이스에 정의된 변수는 public static final(상수)로 선언된다.
public interface Interface {
int NUM = 1; // public static final int NUM = 1; 두문장은 동일하다.
void inter(); // public abstract void inter(); 두문장은 동일하다.
}
– 참조변수 생성과 오버라이딩이 가능
– implements 키워드를 사용하여 구현(상속)
public class Test{
public static void main(String[] args) {
Interface inter = new AA();
inter.inter();
}
}
class AA implements Interface{
@Override
public void inter() {
System.out.println("오버라이딩");
}
}
– 둘 이상의 인터페이스 구현(상속)이 가능하다.
– 인터페이스가 인터페이스를 상속할때는 extends 를 사용
public interface AAA extends Interface, Interhair{
}