인터페이스 선언
- interface 키워드를 사용
인터페이스 선언 예시
public interface RemoteControl { }
인터페이스는 데이터를 저장할 수 없기 때문에 인스턴스, 정적 필드 선언 x,
상수 필드는 선언 가능(인터페이스에 고정된 값으로 실행 시 데이터 바꿀 수 x)
=> 인터페이스에 선언된 필드는 public static final 특성을 갖음
public interface RemoteControl {
// 상수
int MAX_VALUME = 10; // 앞 부분에 public static final 생략 가능
int MIN_VALUME = 0;
}
public interface RemoteControl {
// 상수
int MAX_VALUME = 10; // 앞 부분에 public static final 생략 가능
int MIN_VALUME = 0;
// 추상 메서드 - 메서드 선언부만 작성
void trunOn();
void trunOff();
void setVolume(int volume);
}
다중 구현이 가능
인터페이스를 사용하기 위해 구현클래스에서 implements 키워드를 추가하여 인터페이스 이름을 명시
=> 구현클래스에서 인터페이스에 선언된 추상메서드의 실체메서드를 작성
인터페이스 사용
=>클래스 선언 시 인터페이스는 필드, 생성자, 메서드의 매개변수, 생성자 또는 메서드의 로컬변수로 선언 가능
public class MyClass{
// 필드
RemoteControl rc = new Television();
// 생성자
MyClass(RemoteControl rc) { // 생성자의 매개값으로 구현 객체 대입
this.rc = rc;
}
// 메서드
void methodA() {
RemoteControl rc = new Audio(); // 메서드의 로컬변수
}
void methodB(RemoteControl rc) { // 메서드의 매개변수
}
}
[문제풀이]
Car 클래스 안에 멤버클래스인 Tire 클래스와 정적 멤버클래스인 Engine 클래스가 선언되어 있다.
Car 클래스 외부에서 Tire 클래스(멤버 클래스)의 객체를 생성 하려면 Car 클래스의 객체를 생성하고 난 후 Tire 객체를 생성할 수 있다.
Car myCar = new Car();
Car.Tire tire = myCar.new Tire();
Car 클래스 외부에서 Engine 클래스(정적 멤버 클래스)의 객체를 생성 하려면 Car 클래스의 객체를 생성하지 않고 바로 Engine 객체를 생성할 수 있다.
Car.Engine engine = new Car.Engine();