여기서는 간단하게 기능만을 알아볼 것이다. 간단한 구조와 사용방법까지 알아보고 JAVA1 기초를 끝내도록 하겠다.
추상클래스를 고도화 시킨 문법이며, 반드시 추상 메서드와 상수만 선언해야 한다.
다른 클래스에서 인터페이스를 지정할 때에는 implements를 사용한다.(다중으로 지정 받을 수 있다.)지정된 인터페이스가 가지고 있는 추상 메서드들을 반드시 재정의 해야한다.
단, 인터페이스를 받은 클래스를 다시 다른 클래스에서 상속 선언하면 원하는 메서드만을 사용 할 수 있다.
클래스로 선언하지 않고 인터페이스로 선언하며, 마찬가지로 추상 메소드와 숫자형과 불리언형 타입만을 선언 할 수 있다. 이 인터페이스를 상속하기 위해서는 extends가 아닌 implements(구현)을 사용하며 아래의 선언은 클래스이름2가 클래스이름1의 기능을 구현한다라고 생각하면 된다.
일반 클래스상속과 마찬가지로 추상메서드로 선언되면 무조건 값을 받아 사용해야한다.
하지만 Adaptor를 이용하면 원하는 값만 상속 받을 수 있다.
인터페이스를 선언하는 것은 위와 같다. 이 인터페이스를 구현하는 클래스를 만들 때 abstract(추상) 을 붙여서 선언하면 원하는 메소드를 재정의 할 수 있고 만약 다른 클래스가 이 추상클래스를 상속받으면 마치 원하는 메소드만을 사용할 수 있는 것처럼 보인다.
인터페이스를 구현하는 클래스가 추상클래스로 선언되고 모든 메소드를 재정의하면 이를 Adaptor라고 한다. 이 Adaptor를 통해서 상속받은 모든 클래스들은 이제 추상메소드에 얽메혀있지 않고 원하는 메소드를 재정의할 수 있다.(이미 종전의 클래스에서 재정의하여 오류가 나지 않음, 만약 종전의 클래스에서 재정의 항목을 누락하면 이후 클래스에서 빠진 메소드를 재정의해야 오류가 나지 않음)
package day20;
public interface Soldier {
int arms = 2;
final static int leg = 2;
abstract void eat();
void work();
void play();
void sleep();
void salute();
}
package day20;
public class Corporal implements Soldier{
@Override
public void eat() {
System.out.println("메뉴를 물어보고 먹는다");
}
@Override
public void work() {
// TODO Auto-generated method stub
System.out.println("일병에게 맡긴다");
}
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("전화하다가 청소시간이 지나간다.");
}
@Override
public void sleep() {
// TODO Auto-generated method stub
System.out.println("근무 없으면 개꿀");
}
@Override
public void salute() {
// TODO Auto-generated method stub
System.out.println("목례하다가 간부에게 경례");
}
}
package day20;
import java.awt.event.MouseAdapter;
//Adapter
public abstract class Army implements Soldier {
@Override
public void eat() {}
@Override
public void work() {}
@Override
public void sleep() {}
@Override
public void salute() {}
@Override
public void salute() {}
}
package day20;
public class Sergeant extends Army{
@Override
public void sleep() {}
}
끄읕