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을 가지고 있다.
//주소값을 직접 보여줄 수 없기때문에 헤시값과 여러가지의 조합
}
}