상속

C/Java : 2007. 11. 5. 15:27
하위클래스는 상위클래스를 확장한다.

 하위클래스는 상위클래스의 모든 public으로 지정한 인스턴스변수와 메소드를 상속하지만 private로 지정한 인스턴스변수와 메소드는 상속할수 없다.

 메소드는 오버라이드 할수 있지만 인스턴스변수는 오버라이드 할수 없다.
 하위클래스에서 재정의 할수 있지만 오버라이드와는 다르다.

 'A는 B다' 테스트를 활용하여 상속 계층이 올바른지 확인한다.

 'A는 B다' 는 한방향으로만 작동한다.

 ex)하마는 동물이지만 모든 동물이 하마는 아니다.

 하위클래스에서 메소드를 오버라이드하면, 하위클래스의 인스턴스에 대해 그 메소드를 호출하면 오버라이드된 버전의 메소드가 호출된다.(맨 밑의 것)

 B가 A를 확장하고 C가 B를 확장하면 B는 A이고, C는 B이고, C는 A이다.(A→B→C)


 

상위 클래스의 확장(extends)


하위 클래스에서 별도의 메소드와 인스턴스 변수를 추가할 수 있고

상위클래스에서 상속받은 메소드를 오버라이드 할 수도 있다.


부모클래스 이름 / 하위클래스 이름 / 상속 예약어


//상위 클래스

public class Doctor {

        boolean worksAtHospital;

        void treatPatient() {   }

}


//하위클래스 1

public class FamilyDoctor extends Doctor {

}


//하위클래스 2

public class Surgeon extends Doctor{

}


Doctor를 상속(extends)하는 하위 클래스 FamilyDoctor, Surgeon


                 

               doctor

          ↗              ↖

                       

surgeon        familydoctor


 상속의 장점

 코드가 중복되는 것을 방지한다.
상위 클래스만 변경하면 하위클래스도 변경된다.
하지만 하위클래스에서 변경된다고 상위클래스의 것이 바뀌지 않는다.
 상위클래스에서 메소드를 정의하면 그 메소드는 하위클래스로 상속될수 있고, 다른 코드에 상위클래스 형식을 쓰는 모든 하위클래스에 메소드의 용도를 알려주는 일종의 규약
 어떤 클래스에 대한 상위 클래스를 만들면 그 상위 클래스 형식이 들어갈수 있는 모든 자리에 해당 상위 클래스와 임의 하위클래스에 속하는 객체를 마음대로 사용할 수 있다.

 상위클래스로 선언된 레퍼런스(역참조변수)를 이용하여 하위클래스 객체를 참조할수 있다.

 Dog myDog

 =

 new Dog();

 1. 레퍼런스 변수 선언

 3. 객체와

레퍼런스 연결

 2. 객체생성

 

 단일 상속


단일상속만을 허용하고 인터페이스를 이용한 보완된 형태의 다중상속을 지원한다.

자식은 둘 이상의 부모를 가질수 없지만(단일상속) 부모는 둘 이상의 자식을 가질수 있다.

자식은 부모가 되어 자식을 가질수 있다.(확장)

Posted by 청웨일