JAVA_27_상속과 포함
상속 inheritence
- 기존의 클래스로 코드를 재사용하여 새 클래스를 작성하는 것
- 두 클래스를 부모-자식의 관계로 맺어주는 것
- 상속관계 : 부모클래스-자식클래스의 관계
class 자식클래스명 extends 부모클래스명 { ... ... }
- 자손은 조상(부모, 부모의 부모..)의 모든 멤버를 상속받는다. 단 ✨생성자와 초기화블럭 제외✨
- 자손의 멤버 개수 >= 조상의 멤버 개수
- 자손Child ⊃ 조상Parent
- 자손의 변경 -> 조상에 영향X
- 조상의 변경 -> 자손도 변경O
class Tv {
boolean power; // 전원on/off, 초기화 false(off)인 상태
int channel; // 채널
void power() {
power = !power; //**홀수번 호출: true(켜진 상태)
}
void channelUp() {++channel;} // 앞이든 뒤든 단독이므로 상관없다.
void channelDown() {--channel;}
}
class SmartTv extends Tv{ // Tv클래스(부모)를 상속받는 SmartTv클래스(자식)
boolean caption; // 자막on/off, 초기화 false(off)인 상태
void displayCaption(String text) {
if(caption) { // 자막이 on(true)일 때 매개변수로 받은 text를 출력
System.out.println(text);
}
else { // 자막 off(false)일 때 nothing 출력
System.out.println("nothing");
}
}
}
public class Ex7_01 {
public static void main(String[] args) {
// 상속
SmartTv stv = new SmartTv();
stv.channel = 10;
stv.channelUp(); // 인스턴스메소드 호출 방법 잊지 말기!
System.out.println(stv.channel);
stv.displayCaption("Hello"); // false(off)이기에 출력x
stv.caption = true; // 자막on
stv.displayCaption("Hello");
}
}
11
nothing
Hello
일반과 상속의 차이
일반
class Point3D {
int x;
int y;
int z;
}
...
...
Point3D p = new Point3D();
상속
class Point {
int x;
int y;
}
class Point3D extends Point {
int z;
}
...
...
Point3D p = new Point3D();
-> 같다!!!
포함 composite
- 클래스의 멤버로 참조변수를 선언하는 것
- 작은 단위의 클래스를 만들고, 이 클래스들을 조합해서 클래스를 만든다.
예)
class Car {
Engine e = new Engine(); // Engine클래스를 포함한다.
Door[] d = new Door[4]; // 요것도!
}
일반과 포함의 차이
일반
class Circle {
int x;
int y;
int r;
}
...
...
Circle c = new Circle();
포함
class Point {
int x;
int y;
}
class Circle {
Point p = new Point();
int r;
}
...
...
Circle c = new Circle();
저장공간이 3개인 건 같다!
InheritenceTest
class MyPoint{
int x;
int y;
}
class Circle extends MyPoint{//상속
int r;
}
class Circle2{//포함
// MyPoint p = new MyPoint();//1.바로 초기화 하거나
MyPoint p;
int r;
//***2. 바깥에 있는 클래스의 생성자 안에서 초기화 해주거나
public Circle2() {
p = new MyPoint();
}
}
public class InheritenceTest {
public static void main(String[] args) {
Circle c = new Circle();
c.x = 1;
c.y = 2;
c.r = 3;
System.out.println("c.x= "+c.x);
System.out.println("c.y= "+c.y);
System.out.println("c.r= "+c.r);
Circle2 c2 = new Circle2();
c2.p.x = 4;
c2.p.y = 5;
c2.r = 6;
System.out.println("c2.p.x= "+c2.p.x);
System.out.println("c2.p.y= "+c2.p.y);
System.out.println("c2.r= "+c2.r);
}
}
c.x= 1
c.y= 2
c.r= 3
c2.p.x= 4
c2.p.y= 5
c2.r= 6
클래스 간의 관계 결정하기
상속
: A는 B이다.
포함
: A는 B를 가지고 있다.
- 바로 위의
Circle클래스
예제의 경우, 원(Circle)이 점(Point)을 갖는 것이므로, 포함이다. - 보통 포함의 경우가 90%
Ref
Author And Source
이 문제에 관하여(JAVA_27_상속과 포함), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lecharl/JAVA27저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)