class Parent {}
class Child extends Parent {}
extends
키워드 사용class Parent {
int age;
}
// 부모 클래스 멤버 개수 1개
class Child extends Parent {}
// 상속 받은 멤버 개수 1개 (age)
class Parent {
int age;
}
// 부모 클래스 멤버 개수 1개
class Child extends Parent {
void play() {
System.out.println("Play");
// 자신 멤버 1개, 상속 받은 멤버 1개, 총 2개
}
}
class Point3D {
int x;
int y;
int z;
}
객체 생성 결과는 똑같다. 1️⃣
Point3D p = new Point3D( );
class Point {
int x;
int y;
}
class Point3D extends Point {
int z;
}
객체 생성 결과는 똑같다. 2️⃣
Point3D p = new Point3D( );
class Circle {
int x;
int y;
int r;
}
void call(){
Circle c = new Circle();
c.x = 0;
c.y = 0;
c.r = 0;
}
구조적 차이가 생긴다. 1️⃣
class Point {
int x;
int y;
}
class Circle {
Point c = new Point();
int r;
}
void call(){
Circle c = new Circle();
c.r = 0;
c.c.x = 0;
c.c.y = 0;
구조적 차이가 생긴다. 2️⃣
자연스러운 문장으로 결정
- 상속 관계 (꼭 필요할 때만 사용)
- A 는 B 이다. (is-a)
- 포함 관계 (대부분 포함 관계 사용)
- A 는 B 를 가지고 있다. (has-a)
class Car extends Hyundai~~, Kia~~ {} // 에러, 조상 하나만 허용
class Car {}
class Tesla extends Car {}
// 컴파일러 자동 추가
class Car extends Object {}
class Tesla extends Car {}
{}
만 변경 가능class Point {
int x;
int y;
String getLocation() {
return "x:" + x + ",y:" + y; // 기존 메서드
class Point3D extends Point {
int z;
String getLocation() {
return "x:" + x + ",y:" + y + "z:" + z; // 오버라이딩