푸린세스

조상-자식 참조변수의 형변환 +instanceof 본문

카테고리 없음

조상-자식 참조변수의 형변환 +instanceof

푸곰주 2022. 3. 26. 11:58
package ex8;

class Fruit{
	void meethod() {
		System.out.println("과일은 달콤상콤해");
	}
}

class Banana extends Fruit{
	
	void method1() {
		System.out.println("바나나는 길어.");
	}
}

class Orange extends Fruit{
	void method2() {
		System.out.println("오렌지는 둥그레");
	}
}

public class InstanceOfTestMyself {

	public static void main(String[] args) {
		
		Fruit ff = new Fruit();
		Banana bb = new Banana();
		
		Fruit ff2 = bb; //자손->부모로 형변환가능 + 생략가능
		//Banana bb2 = (Banana)ff; // 부모->자손으로 형변환가능+생략불가능
		//실행시 에러나타남;;;;
		
		Fruit f = new Fruit();
		Banana b = new Banana();
		//조상에서 자식으로의 형변환은 없는기능이 추가되었기때문에 실행시 에러.
		if(f instanceof Banana) {
					
			
			Banana b1 = (Banana)f;
			b1.method1();
			b1.meethod();
			
		}else {
			System.out.println("과일에서 바나나로 형변환가능,실행불가능,부모에서 자식으로 가능but실행에러+형변환생략불가능");
			
			
		}
		//Banana b1 = (Banana)f; //부모에서 자식으로 형변환가능+생략불가능.
//		b1.method1(); //컴파일자체는 가능한데;; 실행에러 ClassCastException
//		b1.meethod();
		
		if(b instanceof Fruit) {
			Fruit f1 = (Fruit)b;
			f1.meethod();
		}else {
			System.out.println("바나나에서 과일로 형변환가능,실행가능,자식에서 부모로 가능+형변환생략가능");
		}
		Fruit f1 = (Fruit)b;
		f1.meethod();
	}

}

실행결과

 

과일에서 바나나로 형변환가능,실행불가능,부모에서 자식으로 가능but실행에러+형변환생략불가능
과일은 달콤상콤해
과일은 달콤상콤해