-
상속JAVA Story 2022. 12. 30. 18:50
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( ), ...
'JAVA Story' 카테고리의 다른 글
String Class (0) 2023.01.16 오버라이딩 (0) 2022.12.30 오버로딩 (Overloading) (0) 2022.12.21 IntelliJ (0) 2022.12.13 IDE (0) 2022.12.13