java - 다형성 형변환 과 instanceof 연산자

imjingu·2023년 8월 23일
0

개발공부

목록 보기
408/481
package chapter20230823;

public class Car {
	String color;
	int door;
	
	void drive() { // 운전하는 기능
		System.out.println("drive, Brrrrr~");
	}
	
	void stop() { // 멈추는 기능
		System.out.println("stop!!");
	}
}
class FireEngine extends Car { // 소방차
	void water() { // 물을 뿌리는 기능
		System.out.println("water!!!");
	}
}
package chapter20230823;

public class test01 {
	// 다형성과 형변환
	// 자식 타입에서 부모 타입으로는 자동 형변환되지만, 부모에서 자식타입으로는 명시적 형변환
	public static void main(String[] args) {
		FireEngine fireEngine = new FireEngine();
		fireEngine.drive(); // 부모로 부터 상속
		fireEngine.water();
		
		Car car = fireEngine; // car = (Car)fireEngine; 에서 형변환이 생략된 형태
		car.drive();
		// car.water(); // Car 타입의 참조변수로는 water()를 호출할 수 없음
		
		FireEngine fireEngine2 = (FireEngine)car;
		// 부모타입에서 자식타입으로 대입할 떄는 형변환을 해줘야 함
		fireEngine2.drive();
		fireEngine2.water();
	}

}

package chapter20230823;

public class test02 {

	public static void main(String[] args) {
		/*
		 instanceof 연산자
		 a instanceof b : a는 b의 객체이다
		 */
		FireEngine fireEngine = new FireEngine(); // 다형성 이용안함
		
		if(fireEngine instanceof FireEngine) { // fireEngine 는 FireEngine의 객체이다 - true
			System.out.println("This is a FireEngine instance.");
		}
		
		if(fireEngine instanceof Car) { // fireEngine 는 Car의 객체이다 - Car는 부모객체라 상속받음
			System.out.println("This is a Car instance.");
		}
		
		if(fireEngine instanceof Object) { // fireEngine 는 Object의 객체이다 - 상속을 받으면 자동으로 Object생성 Object는 모든 java의 부모객체 
			System.out.println("This is a Object instance.");
		}
		System.out.println();
		
		
		Car polyFireEngine = new FireEngine(); // 다형성 사용해서 참조변수 만듬
		if(polyFireEngine instanceof FireEngine) { // polyFireEngine 는 FireEngine의 객체이다, FireEngine의 본래 객체는 FireEngine이고 그걸 polyFireEngine 넣어줬기 때문에 둘은 같다
			System.out.println("This is a FireEngine instance.");
		}
		
		if(polyFireEngine instanceof Car) { // polyFireEngine 는 Car의 객체이다
			System.out.println("This is a Car instance.");
		}
		
		if(polyFireEngine instanceof Object) { // polyFireEngine 는 Object의 객체이다
			System.out.println("This is a Object instance.");
		}
		System.out.println();
		
		
		Car car = new Car(); // 부모 클래스로 객체 생성
		if(car instanceof FireEngine) { // 부모클래스 입장에서는 누가 상속받았는지 모름 그래서 false
			System.out.println("This is a FireEngine instance.");
		}
		
		if(car instanceof Car) { // car 는 Car의 객체이다
			System.out.println("This is a Car instance.");
		}
		
		if(car instanceof Object) { // car 는 Object의 객체이다
			System.out.println("This is a Object instance.");
		}
		System.out.println();
	}

}

0개의 댓글