상속

young·2022년 12월 29일
0

1. 상속관계

  • 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
  • 두 클래스를 부모와 자식으로 관계를 맺어주는 것
class 자식클래스(자손클래스) extends 부모클래스(조상클래스) {
	// ...
} // extends는 확장한다는 의미
class Parent { }
class Child extends Parent { }
// Child라는 클래스를 만들 때, Parent라는 클래스를 상속 받음
// Child - 자식클래스, Parent - 부모클래스

  • 자식클래스는 부모클래스의 모든 멤버를 상속받음(부모의 부모클래스도 상속 받음)
  • 생성자, 초기화 블럭은 제외
  • 자식클래스의 멤버 개수는 부모클래스보다 항상 같거나 많음
class Parent {
	int age;
}

class Child extends Parent {
	void play () {
    	System.out.println("졸려");
}  // 자신의 멤버 1개 + 상속받은 부모의 멤버 1개 => 총 2개

2. 포함관계

  • 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
class Point {
	int x;
    int y;
}

class Circle {
	int x; // 원점의 x좌표
    int y; // 원점의 y좌표
    int r; // 반지름(radius)
}

⬇️

class Point {
	int x;
    int y;
}

class Circle {
	Point c = new Point();
    // 클래스의 멤버로 다른 클래스 타입의 변수를 선언하고, 이 타입의 객체를 생성
    int r;
}

3. 단일 상속(single inheritance)

  • 하나의 부모만 상속하는 것(즉, 둘 이상의 클래스로부터 상속을 받을 수 없음)
class TVCR extends TV, VCR {  // 에러 (하나의 부모만 상속)
	// ...
}

다중상속(multiple inheritance) : 여러 부모클래스로부터 상속받는 것이 가능

  • 단점 : 여러 조상 클래스로부터 다중상속을 받을 경우 자손 클래스들이 이름은 같고 내용이 다를 때 충돌이 일어날 수 있어 나중에 해결하기 어려움

  • Java에서 다중상속의 효과를 내는 방법 : 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계
class TV {
	boolean power;
    int channel;
    
    void power ()       { power = !power; }
    void channelUp ()   { ++channel; }
    void channelDown () { --channel; }
}
class VCR {
	boolean power;
    int counter = 0;
    void power () { power = !power; }
    void play () { 생략 }
    void stop () { 생략 }
    void rew () { 생략 }
    void ff() { 생략 }
}
class TVCR extends Tv { // 상속
	VCR vcr = new VCR(); // 포함
    void play() {
    	vcr.play();
    }
    void stop() {
    	vcr.stop();
    }
    void rew() {
    	vcr.rew();
    }
    void ff() {
    	vcr.ff();
    } // 객체 사용
}

4. Object 클래스

  • 모든 클래스 상속계층도의 최상위에 있는 조상클래스
  • 상속 받지 않는 모든 클래스(부모가 없는 클래스)들은 자동적으로 Object 클래스를 상속받음
class Tv {
	...
}

⬇️

class Tv extends Object { // 컴파일러가 자동적으로 추가
	...
}
  • 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속 받음
    ex) toString( ), equals( ), ...
profile
🐿 개발중...

0개의 댓글