JAVA

[Java] has-a 관계(포함) vs is-a 관계(상속)

sagesse2021 2021. 10. 30. 09:00
반응형
/*
* has-a 관계(포함) vs is-a 관계(상속)
* 1. has-a 관계(포함)
*    - A has a B = A 가 B 를 포함한다 로 표현 가능한 관계
*    - 가장 일반적인 객체간의 관계
*    - 특정 클래스 내에서 다른 클래스의 인스턴스를 생성하여
*      해당 인스턴스를 다루는 관계
*    - 예) 자동차 - 엔진, 스마트폰 - 카메라
*
* 2. is-a 관계(상속)
*    - A is a B = A 는 B 이다 로 표현 가능한 관계
*    - 특정 클래스가 다른 클래스를 상속받아
*      해당 클래스의 멤버를 선언없이 다루는 관계
*    - 예) 자동차 - 소방차, 핸드폰 - 스마트폰
*/
public class Ex3 {

	public static void main(String[] args) {


		
	}

}
class Engine {
	int cc = 3000;
}

//자동차(Car)와 엔진(Engine)의 관계는? has-a(포함) 관계이다
//=> 자동차는 엔진을 포함한다 = Car has a Engine.
class Car {
	// 포함관계일 경우 해당 클래스의 인스턴스를 통해 접근 가능한 관계
	Engine engine = new Engine();//다른 클래스의 인스턴스 만들어서 쓰면 포함관계(상속과 다름)
	
	String modelName = "그랜저";
	
	public void showCarInfo() {
		// 자신의 멤버변수에 접근 시 변수명만으로 접근 가능
		System.out.println("모델명 : " + modelName);
		
		// 포함관계에 있는 클래스의 멤버에 접근 시 참조변수를 통해 접근 가능
		System.out.println("배기량 : " + engine.cc);
	}
}


//소방차와 자동차의 관계는? is-a 관계(상속)이다.
//=> 소방차는 자동차이다 = 소방차 is a 자동차
class FireEngine extends Car{
	int supplyLimit = 10000; // 급수량
	
	public void showFireEngineInfo() {
		// 자신의 멤버에 접근
		System.out.println("급수량 : " + supplyLimit);
		
		// 부모의 멤버에 접근
		System.out.println("모델명 : " + modelName);
		
		// 부모와 포함관계인 Engine 객체의 멤버에 접근
		System.out.println("배기량 : " + engine.cc);//부모와 포함관계인 멤버변수는 참조변수를 통해서 호출 
	}
}
반응형

'JAVA' 카테고리의 다른 글

[Java] 상속 연습  (0) 2021.10.30
[Java] 상속에서의 생성자  (0) 2021.10.30
[Java] 상속의 장점  (0) 2021.10.29
[Java] 상속(Inheritance)  (0) 2021.10.29
[Java] 싱글톤 디자인 패턴  (0) 2021.10.29