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.)