본문 바로가기

Java/강의

상속 (Inheritance)

상속의 개념
// Vehiecle 클래스로부터 서브클래스 Car를 정의한 프로그램

public class CarInformationClass
{
  public static void main(String[] args)
  {
    Car aCar = new Car("Car""Red"5);
    aCar.printType();
    aCar.printColor();
    aCar.printNumOfPerson();
  }
}

class Vehiecle
{
  private String type;
  protected String color;

  public Vehiecle(String aType, String aColor)
  {
    type=aType;
    color=aColor;
  }

  /*protected*/ void printColor()
  {
    System.out.println("< Color : " + color + >");
  }

  protected void printType()
  {
    System.out.println("< Type : " + type + >");
  }
}

class Car extends Vehiecle
{  // Car 는 Vehiecle을 상속 받았다.(C++ ☞ Car : Vehiecle) java 단일상속, C++ 다중상속 지원!

  private int numberOfPerson;

  public Car(String aType, String aColor, int num)
  {
    super(aType, aColor);  // 
    numberOfPerson = num;
  }

  public void printNumOfPerson()
  {
    System.out.println("< NumOfPerson : " + numberOfPerson + >");
  }
}

   체지향 프로그래밍에서의 상속이란 부모클래스로부터 애트리뷰트나 
   메소드를 물려받아서 새로운 자식클래스를 만드는 것을 말한다. 
   이렇게 만들어지는 자식클래스는 기존에 만들어진 부모클래스가 가지는 애트리뷰트나 
   메소드를 상속받기때문에, 처음부터 새로운 클래스를 설계하여 코딩하는 것에 비해 
   시간과 노력을 절약할 수 있을 뿐만아니라 부모클래스의 메소드를 
   여러 자식 클래스가 공유하므로 프로그램 코드를 재사용할 수 있다.
   아래 그림을 참조 하길 바란다.

특정목적의 클라스 라이브라리 구축. 

▶ 자식클래스는 부모클래스로부터 상속받은 속성이나 메소드에 자식클래스가 필요한 요소를 추가할 수 있을 뿐만아니라, 
   상속받은 메소드를 자식클래스에서 적절하게 수정하거나 상세화할 수 있다. 

▶ 그러므로 클래스 라이브러리의 메소드를 응용 프로그램에 맞추어 수정가능, 
   또 클래스 라이브러리를 이용해서 특정 목적의 클래스 라이브러리를 구축가능. 

실사회의 모델링 

▶ 클래스- 동일한 속성을 가진 객체들의 집합 (객체들 
   사이의 관계) 상속은 비슷한 속성을 가진 클래스 사이의 관계를 나타낸다. 

▶ 실사회의 여러 객체들을 공통된 속성에 따라 클래스로 묶을 수 있으며, 
   여러 클래스 사이의 공통된 속성을 이용하여 상속체계를 만들 수 있다. 

▶ 자바같은 객체지향 언어에서는 클래스 사이의 상속 관계를 언어 자체에서 
   지원함으로서 프로그램 내에서 실사회를 보다 정확하게 모델링할 수 있다. 
   
수퍼클래스/서브클래스 

▶ 기본클래스, 수퍼클래스(superclass) 
   또는 부모클래스(parent class) 

▶ 파생클래스, 서브클래스(subclass) 또는 자식클래스(child class) 

▶ 직접 수퍼클래스(direct superclass) vs. 간접 수퍼클래스(indirect superclass) 
   
상속체계에서 상위에 위치하는 클래스일수록 보다 일반적(generic)이며, 
하위 클래스로 내려갈수록 특성화(specific)된다. 
▶ 서브클래스에 속한 모든 객체는 수퍼클래스의 객체에 속하기 때문에,
   서브클래스와 수퍼클래스는 is-a 관계를 형성한다.     
   (개는 포유류이다:The dog is a mammal).
 
▶ 하나의 객체는 여러 개의 애트리뷰트를 가질 수 있다.
   애트리뷰트는 기본자료형의 데이타나 다른 클래스의 객체가 될 수 있다. 
   객체와 애트리뷰트의 관계는 has-a 또는 component-of의 관계를 가진다.   

▶ 프로그램의 설계에 있어서 is-a관계와 has-a관계는 혼돈되기 쉬우므로,
   이 두 관계에 대한 명확한 개념을 가져야 한다.   

단일상속/다중상속 

▶ 자식 클래스가 하나의 수퍼클래스만을 가지는 단일상속(single nheritance)
   여러 개의 수퍼클래스를 가질 수 있는 다중상속(multiple inheritance)
▶ 자바에서는 단일 상속만을 허용한다. (interface를 두어 다중상속 지원)
   다중상속이 가지고 있는 여러가지 복잡한 문제점으로부터 벗어나면서,     
   다중상속의 장점을 취하기 위해서이다 

'Java > 강의' 카테고리의 다른 글

Object 클래스  (0) 2011.02.25
매소드 재정의 (Method Overriding)  (0) 2011.02.23
Random 클래스  (0) 2011.02.21
vector 클래스  (0) 2011.02.16
Character 클래스  (0) 2011.02.16