- 인터페이스(다중상속, 다형성)
추상 클래스와 비슷한 기능을 제공하지만 차이점이 존재합니다. 추상 클래스에는 일반 변수나 일반 메서드도 정의할 수 있지만 인터페이스에서는 오로지 상수나 추상 메서드만 정의할 수 있습니다.(abstract>interface)
Java 다중상속은 문법적으로 되지 않아 Interface를 이용하여 다중상속의 효과를 받습니다.
인터페이스 내에는 static상수도 올 수 있습니다. 자식Class에서 값을 바꿀 수 없기때문이기도 합니다.
인터페이스의 상속은 구현입니다. extends가 아닌 implements를 사용합니다.
Java에서는 다중상속이 불가하지만 인터페이스끼리는 다중상속이 가능합니다.
다음은 상속과 구현을 동시에 한 클래스 입니다.
- public interface A { //인터페이스 A
- void testA();
- }
- public class B {
- void testB(){}
- }
- public class C extends B implements A{ //B를 상속받고 A를 구현한 C클래스
- @Override
- public void testA(){} //오버라이딩
- public void testC(){}
- }
- public class Main {
- A a = new C(); //a.testA(); 만 호출가능
- B b = new C(); //b.testB(); 만 호출가능
- C c = new C(); //c.testC(); 만 호출가능
- //a와 b의 경우도 강제형변환 후에 호출은 가능합니다.
//((C)a).testC();
- }
- }
- abstract
- abstract 를 쓰는 이유는?
강제성(자식클래스에게 반드시 오버라이딩을 하게한다)
예로, Car 클래스의 speedUp()메서드는 Truck, Taxi 등의 하위 클래스에서 모두 다르게 구현해야 될 필요가 있는데, Car 클래스에서 이미 메서드가 있다면, 하위 클래스를 구현한느 프로그래머가 해당 메서드를 빼먹을 수 있다. 그러나, 추상 클래스로 최상위 클래스를 정의하면서 speedUp()메서드를 메서드를 추상메서드로 선언하면, 하위 클래스는 추상메서드를 반드시 오버라이딩 해주어야 하기 때문에, 하위의 모든 클래스가 speedUp()메서드를 만들어야 한다.
댓글 없음:
댓글 쓰기