extends 는 다른 클래스의 것을 상속받는다고 표현합니다. 이렇게 하면 상속받은 클래스의 함수나 변수를 사용할 수 있습니다.

  1. 하나의 부모 클래스는 여러 개의 자식 클래스를 가질 수 있습니다.
  2. 부모 클래스는 자식 클래스의 자원을 이용할 수 없습니다.
  3. 반대로 자식 클래스는 부모 클래스의 자원을 이용할 수 있습니다.
  4. 하나의 클래스는 여러 개의 클래스로부터 상속받을 수 없습니다.
  5. 자식클래스는 또다른 클래스의 부모 클래스가 될 수 있습니다.

다음 예제에서 BB 클래스는 AA 클래스의 것을 상속받았기 때문에 BB 클래스로 AA 클래스의 것을 사용할 수 있게 됩니다.

// ex.1)
public class Ex01 {
    public static void main(String[] args) {
        BB bb = new BB();
        bb.doA();
    }
}
 
// 부모 클래스입니다.
class AA{
    public int a;
    public void doA() {
        System.out.println("doA method");
    }
}
// 자식 클래스입니다.
class BB extends AA{ }


아래는 결과 화면입니다.


다음은 BB 클래스는 AA 클래스를 상속받아 AA 클래스를 사용할 수 있지만, CC 클래스는 상속받지 않았기 때문에 CC 클래스의 것을 사용할 수 없습니다.

반대로 CC 클래스는 BB 클래스를 상속받았기 때문에 BB 클래스를 사용할 수 있고, AA 클래스를 사용할 수 있게 됩니다. 

// ex.2)
public class Ex01 {
    public static void main(String[] args) {
        BB bb = new BB();
        bb.doA();
        CC cc = new CC();
        System.out.println(cc.b);
        cc.doB();
        cc.doA();
         
    }
}
// 부모 클래스입니다.
class AA{
    public int a;
    public void doA() {
        System.out.println("doA method");
    }
}
// AA 부모 클래스의 자원을 이용할 수 있지만
// CC 클래스의 자원을 모두 이용할 수 없습니다.
class BB extends AA{
    public int b;
    public void doB() {
        System.out.println("doB method");
    }
}
// AA 부모 클래스 자원,
// BB 클래스 자원을 이용할 수 있습니다.
class CC extends BB { }


아래는 결과 화면입니다.


다음은 B 클래스가 A 클래스를 상속하고, a 변수가 동일하다면 B 클래스의 것을 사용합니다. 

// ex.3)
public class Ex01 {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.a);
    }
}
// 부모 클래스입니다.
class A{
    public int a = 10;
}
// 자식 클래스입니다.
// 오버라이딩: 부모 클래스에 있는 a 변수는
// B 클래스에도 동일하게 a 변수가 있으므로
// B 클래스의 a 로 수정됩니다.
class B extends A{
    public int a = 20;
}


아래는 결과 화면입니다.


0 댓글