2014년 4월 8일 화요일

[Java]Interface와 abstract


  • 인터페이스(다중상속, 다형성)
100%의 추상Class를 Interface라 합니다.
추상 클래스와 비슷한 기능을 제공하지만 차이점이 존재합니다. 추상 클래스에는 일반 변수일반 메서드도 정의할 수 있지만 인터페이스에서는 오로지 상수추상 메서드만 정의할 수 있습니다.(abstract>interface)
Java 다중상속은 문법적으로 되지 않아 Interface를 이용하여 다중상속의 효과를 받습니다.
인터페이스 내에는 static상수도 올 수 있습니다. 자식Class에서 값을 바꿀 수 없기때문이기도 합니다.
인터페이스의 상속은 구현입니다. extends가 아닌 implements를 사용합니다.
Java에서는 다중상속이 불가하지만 인터페이스끼리는 다중상속이 가능합니다.
다음은 상속과 구현을 동시에 한 클래스 입니다.

  1. public interface A //인터페이스 A
  2.     void testA();
  3. }

  1. public class B {
  2.     void testB(){}
  3. }

  1. public class C extends B implements A//B를 상속받고 A를 구현한 C클래스
  2.     @Override
  3.     public void testA(){} //오버라이딩
  4.     public void testC(){}
  5. }

  1. public class Main {
  2.     public static void main(String[]args){
  3.        
  4.         A a = new C()//a.testA(); 만 호출가능
  5.         B b = new C()//b.testB(); 만 호출가능
  6.         C c = new C()//c.testC(); 만 호출가능
  7.         //a와 b의 경우도 강제형변환 후에 호출은 가능합니다.

  8.   //((C)a).testC();
  9.     }
  10. }
  • abstract

  • abstract 를 쓰는 이유는?
        강제성(자식클래스에게 반드시 오버라이딩을 하게한다)

예로, Car 클래스의 speedUp()메서드는 Truck, Taxi 등의 하위 클래스에서 모두 다르게 구현해야 될 필요가 있는데, Car 클래스에서 이미 메서드가 있다면, 하위 클래스를 구현한느 프로그래머가 해당 메서드를 빼먹을 수 있다. 그러나, 추상 클래스로 최상위 클래스를 정의하면서 speedUp()메서드를 메서드를 추상메서드로 선언하면, 하위 클래스는 추상메서드를 반드시 오버라이딩 해주어야 하기 때문에, 하위의 모든 클래스가 speedUp()메서드를 만들어야 한다.

댓글 없음:

댓글 쓰기