abstract 키워드와 함께 원형만 선언되고, 코드는 작성되지 않은 메소드를 의미한다.
abstract public String getName();
abstract public String fail() { return "Good Bye";}
abstract 키워드와 함께 선언된 클래스이다.
// 추상 메소드를 가진 추상 클래스
abstract class Shape{ //추상 클래스 선언
public Shape(){..}
public void edit() {..}
abstract public void draw(); // 추상 메소드 선언
}
abstract public String getName();
abstract public String fail() { return "Good Bye";}
// 추상 메소드가 없는 추상 클래스
abstract class Shape{ //추상 클래스 선언
String name;
public void load(String name) {
this.name = name;
}
}
실행 코드가 없는 미완성 상태인 추상 메소드가 있을 가능성이 있기 때문이다!
추상 메소드를 가진 추상 클래스를 상속받는 서브 클래스는 자동으로 추상 클래스가 된다.
서브 클래스에서 슈퍼 클래스의 모든 추상 메소드를 오버라이딩하여 실행 가능한 코드로 구현하는 것
객체를 생성하기 위함이 아니라 상속을 위한 슈퍼 클래스를 활용하기 위해서 사용하는 것이며
추상 메소드를 통해 서브 클래스가 구현할 메소드의 원형을 알려주는 인터페이스 역할과 서브 클래스의 다형성을 실현한다.
흔히 일상생활에서 말하는 인터페이스는 서로 다른 하드웨어 장치들이 상호 데이털르 주고받을 수 있는 규격을 의미한다.
앞서 말한 인터페이스의 개념을 소프트웨어에 적용한 것으로, 소프트웨어를 규격화된 모듈로 만들고, 인터페이스가 맞는 모듈을 조립하여 응용프로그램을 작성하도록 만드는 것을 의미한다.
interface PhoneInterface{
public static final int TIMEOUT = 10000; // 상수 필드, public static final 생략 가능
public abstract void sendCall(); // 추상 메소드, public abstract 생략 가능
public abstract void receiveCall(); // 추상 메소드, public abstract 생략 가능
public default void printLog(){ // 디폴트 메소드는 메소드 public abstract 생략 가능
System.out.println("** phone **");
} // 디폴트 메서드
}
// 인터페이스 상속
interface Phone extends PhoneInterfac, MP3Inteferace{
}
// 인터페이스 구현
class Phone implements PhoneInterface{
}