// interface :
// 각 클래스가 공통 인터페이스를 구현함으로써 통일된 동작을 제공하고, 다른 클래스와 상호 작용할 수 있도록 함
// --> 상속 용도의 클래스..! 근데 일종의 계약이야.
// --> 인터페이스를 구현하는(= 계약한) 클래스는 해당 인터페이스에 정의된 모든 메서드를 반드시 구현해야 힘
// --> 이때, implements 키워드를 사용하여 클래스가 특정 인터페이스를 구현한다고 선언한다!!
// 이제 main에 클래스 대신 interface를 선언 --> 싹다 추상화임
// 인터페이스는 하위 클래스에서 구현될 '메소드만 선언하고, 구현은 하지 않는다'
// ★★★ 메소드는 무.조.건. public!!! (일반적 표현방법 : public + return타입 + 매소드명 + ();) ★★★
// interface와 계약한 클래스는 인터페이스의 메서드들을 다 실행시켜야하지? (= abstract가 있어서!)
interface AAA{
public abstract void test1(); // 정확한 표현방법
public void test2();
// 일반적 표현방법 (--> abstract빼도 의미가 없어. 어차피 추상화클래스야. 밑에도 마찬가지겠지?)
abstract void test3();
void test4();
}
// implements : 인터페이스를 구현하는 클래스를 선언할 때 사용 (상속과 비슷한 개념)
// --> "implements"를 사용하면 해당 클래스는 인터페이스에서 정의한 '모든 추상 메서드를 반드시 구현' 해야함!
(= 오버라이딩해야한다.)
class TTT implements AAA{
public void test1() {
System.out.println("AAA로 부터 상속받은 test1 매서드");
}
public void test2() {}
public void test3() {}
public void test4() {}
}
// Main
AAA a = new TTT(); // 이게 정석이야 이제. 다형성을 사용해야해!!!
a.test1(); // 원래는 a는 참조타입인 AAA의 test1을 가져온다
// 난 지금 오버라이딩을 했지? --> TTT클래스의 test1이 실행됨
// --> "AAA로 부터 상속받은 test1 매서드"가 출력된다.
'JAVA > DAY 15 _ 23.09.06' 카테고리의 다른 글
interface 활용ex - self (0) | 2023.09.14 |
---|---|
Abstract Class_ 스타ex활용 (0) | 2023.09.14 |
Overiding (0) | 2023.09.13 |
상속_array활용3 (0) | 2023.09.13 |
상속_array활용2 (0) | 2023.09.12 |