상속(Inheritance)과 포함(Composite)

‍김다솔·2021년 4월 13일
0

상속(Inheritance)

class Point {
	int x;
	int y;
}

class Point3D extends Point {
	int z;
}

class Point3D2 extends Point {
	int x;
	int y;
	int z;
}
  • 기존의 클래스로 새로운 클래스를 작성하는 것 (코드 재사용)
  • 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화 블럭 제외)
  • 자손의 멤버 개수는 조상보다 적을 수 없다. (>=)
  • 자손의 변경은 조상에 영향을 미치지 않는다.
  • 부모 클래스는 자식 클래스의 부분 집합

포함(Composite)

class Circle1 {
	int x, y, r;
}

class Point {
	int x, y;
}

class Circle2 {
	// 클래스 멤버로 참조변수 선언
	Point p = new Point(); // Circle2가 Point를 포함(composite)
	int r;
}
  • 클래스의 멤버로 참조 변수를 선언하는 것
  • 작은 단위의 클래스를 만들고, 이를 조합해서 클래스를 만든다.

상속관계 (10%) : A는 B이다.
포함관계 (90%) : A는 B를 가지고 있다.


단일 상속(Single Inheritance)

class TvDvD extends Tv, DVD { // ERROR
}
  • Java는 단일 상속만 허용한다. (C++은 다중 상속 허용)
  • 다중 상속에서 부모 클래스들이 같은 이름의 메서드와 다른 내용으로 정의되면 충돌이 일어난다.
  • 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 하여 다중 상속 효과를 낸다.

Object 클래스

class Tv { // extends Object 생략, 컴파일러가 자동 추가
}
  • 모든 클래스의 최고 조상
  • 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다.
  • toString(), equals(Object obj), hashCode() 등 11개의 메서드를 상속 받는다.
  • Object ← Tv ← SmartTv : 상속 계층도
System.out.println(c.toString());
System.out.println(c); // println()은 참조변수가 들어오면 자동으로 toString() 호출
// Circle@4926097b
// Circle@4926097b
profile
💻🎧⚽

0개의 댓글

관련 채용 정보