☕ 자바 JAVA/☕ 클래스와 함수 Class & Method

[JAVA]단일상속 Single Inheritance & Object class

yeun.log 2024. 3. 25. 21:18
반응형

먼저 다중상속이란?

class Tv {}
class DVD {}
class TvDVD extends Tv, DVD {} // <- 다중상속

이런식으로 두 개 이상의 class를 상속 받는 것.

c++에서는 가능하다.


 

JAVA는 단일상속만을 허용한다

 

  • 다중상속 시 발생할 수 있는 충돌문제 때문에 단일상속만 허용한다.
  • 대신해 interface를 이용해 다중상속과 같은 효과를 낼 수 있다.
  • 아래의 코드처럼 비중이 높은 클래스 하나만 상속관계, 나머지는 포함관계로 한다.
class Tv {
    boolean power;
    int channel;

    void power() {power = !power;}
    void channelUp() {++channel;}
    void channelDown() {--channel;}
}

class DVD {
    boolean power;

    void power() {power = !power;}
    void play() {}
}

 class TvDVD extends Tv {
    DVD dvd = new DVD();

    void play() {
        dvd.play();
    }
 }

 


 

Object class
: 모든 클래스의 조상

 

class Tv {}

이렇게 extends가 없어 아무것도 상속받지 않는 것처럼 보이는 class도

class Tv extends Object {}

compile 할 때 자동으로 Object class를 상속받는다.

  • 모든 class는 Object class에 정의된 11개의 method를 상속 받는다.
  • toString(). equals(Object obj), hashCode(), ...등의 method를.
    그래서 따로 호출하지 않아도 위의 함수들을 사용할 수 있는 것.

 


 

그래서 상속계층도를 그려보자면

 class TvDVD extends Tv {
    DVD dvd = new DVD();

    void play() {
        dvd.play();
    }
 }

위의 코드는 Object <- Tv <- TvDVD 순으로 상속받고 있는 형태이다.

 

반응형