페이지

2015. 1. 12.

[JAVA] Day6.상속(inheritance)

1.1 상속이란?


 - 기존의 클래스를 재사용해서 새로운 클래스를 작성하는것
 - 두 클래스를 조상과 자손으로 관계를 맺어주는것.
 - 자손은 조상의 모든 맴버(변수와 메소드)를 상속받는다. (단, 생성자, 초기화 블록 제외)
 - 자손의 맴버개수는 조상보다 적을 수 없다. (같거나 많다.)


class 자식Class extends 부모Class
{
    //...
}




class A
{
    int x = 100;
}
class B extends A
{
    int y = 200;
}

class Test
{
    public static void main(String[] args)
    {
        B b = new B();
        System.out.println("b.x = " + b.x);
        //class A에서 x를 상속받음
        System.out.println("b.y = " + b.y);
    }
}




1.2 클래스간의 관계


상속관계(inheritance)

 - 공통부분은 조상에서 관리하고 개별 부분은 자손에서 관리한다.
 - 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다.

포함관계(composite)

 - 포함이란? 한 클래스의 맴버변수로 다른 클래스를 선언하는 것
 - 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다.





1.3 클래스간의 관계결정하기(상속 vs. 포함)


 - 가능한 한 많은 관계를 맺어주어 재사용성을 높이고 관리하기 쉽게 한다.
 - 'is - a'와 'has - a'를 가지고 문장을 만들어 본다.
 - 원(Circle)은 도형(Shape)이다. (A Circle is a Shape): 상속관계
 - 원(Circle)은 점(Point)을 가지고 있다. (A Circle has a Point): 포함관계





1.4 단일상속(single inheritance)

 - java는 단일상속만을 허용한다.(c++은 다중상속 허용)
 - 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.

단, 자바는 단일 상속만 허용한다!!

다중 상속이라는 개념 자체가 없음




1.5 Object class (모든 클래스의 최고 조상)

 - 조상이 없는 클래스는 자동적으로 Object클래스를 상속받게 된다.
 - 상속 계층도의 최상위에는 Object클래스가 위치한다.
 - 모든 클래스는 Object클래스에 정의된 11개의 메서드를 상속받는다.(버전이 업데이트 되면서 2개 정도 메서드만 사용된다. equals(), toString() 정도만 쓰임.)

class A
{
    int x = 100;
}
class B extends A
{
    int y = 200;
}

class Test
{
    public static void main(String[] args)
    {
        B b = new B();
        System.out.println(b.toString());
        System.out.println(b);
        //기본적으로 참조변소 b는 주소와 비스무리한 String을 가지고 있다.
        //주소값을 직접 보여줄 수 없기때문에 헤시값과 여러가지의 조합
    }
}