인터페이스 : 객체의 사용방법을 정의한 타입, 다형성 구현
interface 인터페이스 이름 {
// 상수
// 추상 메소드
// 디폴트 메소드
// 정적 메소드
// private 메소드
// private 정적 메소드
}
구현 클래스
public class 구현 클래스 이름 implements 인터페이스 이름 {
// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}
사용방법
인터페이스 변수;
변수 = 구현객체;
ex> RemoteControl rc;
rc = new Televison();
인터페이스 변수 = 구현객체;
ex> RemoteControl rc = new Televison();
다형성
자동타입변환, 강제타입변환
Vehicle vehicle = new Bus(); ---> 자동타입변환
Bus bus = (Bus) vehicle; ---> 강제타입변환 (인터페이스에 자동변환된 객체를 다시 되돌림)
객체타입확인
객체 instanceof Bus --- true, false
중첩 선언과 중첩 객체
클래스는 긴밀한 관계를 가진 클래스와 인터페이스를 내부에 선언할 수 있다
중첩클래스 : 클래스 내부에 선언한 클래스 ---> 바깥 클래스와 긴밀한 관계를 가짐
- 멤버클래스 : 인스턴스 멤버 클래스, 정적 멤버 클래스
- 로컬클래스 : 생성자 또는 메소드 내에서 선언된 클래스
중첩인터페이스 : 클래스 내부에 선언한 인터페이스
중첩 인터페이스 : 클래스의 멤버로 선언된 인터페이스
해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위함
인스턴스 멤버 인터페이스와 정적 멤버 인터페이스 모드 가능함
익명객체 - 이름이 없는 객체
명시적으로 클래스를 선언하지 않기 때문에 쉽게 객체 생성 가능
- 클래스를 상속하거나 인터페이스를 구현해야만 생성 가능함
1. 클래스를 상속해서 만들 경우 ---> 익명 자식 객체
2. 인터페이스를 구현해서 만들 경우 ---> 익명 구현 객체
new 인터페이스() {
// 필드
// 메소드
}
Tire tire1 = new Tire() {
roll() {
sysout("바퀴가 굴러갑니다.");
}
}
tire1.roll();
class Tire {
roll() {
sysout("바퀴가 굴러갑니다.");
}
}
class KumhoTire extends Tire {
roll() {
sysout("금호 바퀴가 굴러갑니다.");
}
}