다중 상속
추상 클래스와 인터페이스를 공부했다면 추상 클래스와 인터페이스의 차이점에 대해 의문이 생길 것이다.
추상 클래스와 인터페이스의 공통점은 메소드의 선언만 할 수 있고 구현부가 없다는 점,
상속받은 클래스에서 추상 메소드를 구현해야 한다는 점이라고 할 수 있다.
그러면 추상 클래스 하나만 있어도 인터페이스의 역할을 다 할 수 있는 것이 아닐까?라는 생각이 들텐데
자바의 다중 상속 부분에서 차이가 난다. 일단 자바는 다중 상속이 불가능하다.
여기서 다중 상속이란 아래와 같이 자식 클래스의 부모가 여러 개인 것을 말한다.
// 잘못된 코드
public class Vehicle extends Bus, Car {
}
그러면 왜 다중 상속이 불가능할까라는 생각이 들 것이다.
만약에 Bus 클래스에도 drive() 메소드가 있고, Car 클래스에도 drive() 메소드가 있다고 할 때
Vehicle 클래스에서 drive() 메소드를 호출한다고 한다면 어느 클래스의 drive() 메소드를 호출시킬 것인지
모르기 때문에 다중 상속은 지원하지 않는다.
그렇다면 다중 상속 구현은 하지 못하는건가? 그건 아니다.
이때 사용하는 것이 인터페이스인데 추상 클래스는 다중 상속이 불가능하기 때문에
아래의 코드처럼 인터페이스를 통한 다중 상속의 기능을 쓰는 것이다.
public interface Car {
public void dirve();
}
public interface Bus {
public void dirve();
}
public class Vehicle implements Bus, Car {
@Override
public void dirve() {
System.out.println("붕붕");
}
}
public class VehicleTest {
public static void main(String[] args) {
Vehicle v = new Vehicle();
v.dirve();
}
}
// 결과
붕붕
이렇게 인터페이스를 사용한다면 Car와 Bus 모두 인터페이스로 구현하여 drive() 메소드를 선언하더라도
Vehicle 클래스에서 다중 상속을 받을 수 있다.
추상 클래스와 인터페이스를 아래와 같이 정리해보자.
추상 클래스는 extends를 사용하여 부모 클래스의 기능들을 하위 클래스로 확장시키는 것으로
상속 관계에 있는 클래스를 타고 올라갔을 때 자식 클래스들은 같은 부모 클래스를 상속하여
같은 기능이 필요한 경우 사용하자.
인터페이스는 implements를 사용하여 해당 인터페이스를 구현한 객체들이 동일한 기능으로 동작하는 것으로
상속 관계에 있는 클래스를 타고 올라갔을 때 다른 부모 클래스를 상속해도 같은 기능을 사용할 때 쓰자.
★추상 클래스와 인터페이스의 차이점을 잘 정리해놓은 사이트★
https://myjamong.tistory.com/150
'국비 지원 > JAVA' 카테고리의 다른 글
[JAVA] final과 상수(static final) (0) | 2023.05.21 |
---|---|
[JAVA] 익명 함수와 람다 함수 (0) | 2023.05.21 |
[JAVA] 인터페이스 (+ 다운 캐스팅) (0) | 2023.05.16 |
[JAVA] abstract 추상 클래스와 추상 메소드 (+ 업캐스팅) (1) | 2023.05.15 |
[JAVA] 부모 생성자 호출 super() / 부모 메소드 호출 super (0) | 2023.05.15 |