출처:http://javai.tistory.com/98

package com.cast3;

public class CastingTest1 {
	public static void main(String[] args){
		FireEngine fe = new FireEngine();
		fe.water();
		
		Car car = null; //객체 선언(객체의 주소가 보관될 변수 선언)
		car = fe;	//자식 클래스 타입 -> 부모 클래스 타입 (업캐스팅)자동형변환
		//car.water();
		
		FireEngine fe2 = null;
		fe2 = (FireEngine)car;//부모 클래스 타입->자식 클래스 타입
		fe2.water();          //(다운 캐스팅)명시적 형변환
	}
}

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 com.cast2;//레퍼런스 형변환에 오버라이딩적용
//오버라이딩은 다 같지만 전달되는 내용이 다를때 오버라이딩이라함

class Parent3{
	String msg="봄";
	
	public void make(){
		System.out.println("부모 클래스");
	}
}
class Child3 extends Parent3{
	String msg="겨울";
	public void make(){
		System.out.println("자식 클래스");
	}
	
}

public class CastEx4 {
	public static void main(String[] args){
		Child3 ch = new Child3();
		System.out.println(ch.msg);
		
		ch.make();
		
		Parent3 p = ch; //자식 클래스 타입 -> 부모 클래스 타입
						//업 캐스팅, 자동형변환
		
		System.out.println(p.msg);
		
		//오버 라이딩은 가려지지 않아 자식클래스를 호출하게된다
		//무조건 자식클래스를 호출하게됨(형변환을 하더라도)
		//그래서 출력하려면 super()를 사용해야됨	
		p.make();
	}
}


package com.cast3;//슈퍼 클래스형 레퍼런스 변수로 오버라이딩된 메서드 호출
class Parent{
	public void parentPrn(){
		System.out.println("슈퍼 클래스 : parentPrn 메서드");
	}
}

class Child extends Parent{
	//메서드 오버라이딩(재정의)
	public void parentPrn(){
		System.out.println("서브 클래스 : 오버라이딩된 parentPrn 메서드");
	}
	
	public void childPrn(){
		System.out.println("서브 클래스 : ChildPrn 메서드");
	}
}

public class RefTest06 {
	public static void main(String[] args){
		Child c = new Child();
		
		c.parentPrn();
		
		Parent p;
		p=c;	//자식 클래스 타입 -> 부모 클래스 타입
				//업 캐스팅, 자동형변환
		
		p.parentPrn();
		//오버라이딩 되면은 원래 되로 출력되지 않고 서브 클래스가 출력된다
		//형변환이 되었더라도
	}
}


package com.cast2;//레퍼런스 형변환 예제3

class Parent2{
	String msg = "여름";
	public String getMsg(){
		return msg;
	}
}
class Child2 extends Parent2{
	String str = "겨울";
	public String getStr(){
		return str;
	}
}

public class CastEx3 {
	public static void main(String[] args){
		Child2 ch = new Child2();
		System.out.println(ch.msg);
		System.out.println(ch.getMsg());
		System.out.println(ch.str);
		System.out.println(ch.getStr());
		
		Parent2 p = ch; //자식 클래스 타입 -> 부모 클래스 타입
						//업 캐스팅, 자동 형변환
		System.out.println(p.msg);
		System.out.println(p.getMsg());
		
		/*호출 범위를 벗어나 호출 불가 (부모 영역만 호출 가능)
		System.out.println(p.str);
		System.out.println(p.getStr());*/
		
		Child2 ch2 = (Child2)p;//부모 클래스 타입 -> 자식 클래스 타입
								//다운 캐스팅 , 명시적 형변환
		
		System.out.println(ch.msg);
		System.out.println(ch.getMsg());
		System.out.println(ch.str);
		System.out.println(ch.getStr());
	}
}


package com.cast2;//업 캐스팅 예제
class Parent{
	public void parentPrn(){
		System.out.println("슈퍼 클래스 : parentPrn 메서드");
	}
}
class Child extends Parent{
	public void childPrn(){
		System.out.println("서브 클래스 : childPrn 메서드");
	}
}

public class RefTest01 {
	public static void main(String[] args){
		Child c = new Child();
		c.parentPrn();
		c.childPrn();
		
		Parent p;
		p=c;	//자식 클래스 타입 -> 부모클래스 타입
				// 업캐스팅,자동 형변환 (Parent p = c;)
		p.parentPrn();
		//호출 범위를 벗어나 호출 불가
		//p.chidlPrn();
	}
}


package com.cast;//레퍼런스 형변환 2

class Parent2{
	public void make(){
		System.out.println("눈오는 하루");
	}
}
class Child2 extends Parent2{
	public void fun(){
		System.out.println("즐거운 하루");
	}
}

public class CastEx2 {
	public static void main(String[] args){
		Child2 c = new Child2();
		c.make();
		c.fun();
		
		Parent2 p =c;//c에 있는것을 p로 넘기기(업 캐스팅)
					//자식 클래스 타입 -> 부모클래스 타입으로 형변환(자동형변환)
		
		p.make();
		//호출 범위를 벗어나 호출 불가
		//p.fun();
		
		Child2 c2 = (Child2)p;//부모 클래스 타입 -> 자식클래스 타입
								//다운 캐스팅,명시적 형변환
		//줄어 들었다 다시 늘려야 하기때문에 앞에 명시적 형변환을 하기 위해(Child2)를 명시
		c2.make();
		c2.fun();
	}
}


package com.cast;//레퍼런스 형변환 업캐스팅, 다운캐스팅
//레퍼런스 형변환은 부모와 자식간의 관계에서만 가능

class Parent{
	int a=100;
}

class Child extends Parent{
	int b=200;
}

public class CastEx {
	public static void main(String[] args){
		Child c = new Child();
		System.out.println(c.a);
		System.out.println(c.b);
		
		Parent p = c; //자식 클래스 타입 -> 부모 클래스 타입으로
						//업 캐스팅, 자동적으로 형변환
		System.out.println(p.a);
		/*System.out.println(p.b);
		호출 범위를 벗어나 호출 불가*/
		
		//child는 전체를 호출할 수 있지만
		//parent는 child 영역을 호출 할 수 없기에 오류남
		
		//호출 하기 위해 다시 형변환
		Child c2= (Child)p;//부모 클래스 타입  -> 자식클래스 타입
							//다운 캐스팅, 명시적으로 형변환
		System.out.println(c2.a);
		System.out.println(c2.b);
		
	}
}


+ Recent posts