ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 형변환(메모)
    Programming/JAVA 2020. 6. 16. 01:23

    형변환

    -일단은 업캐스팅시 형변환 생략.

    -다운캐스팅시 형변환 입력해주어야함.

    //이거 외우면 일단 반 먹고 들어간거야.

     

    참조변수와 참조변수가 가리키고 있는 인스턴스랑은 전혀 다른 개념이라는 거 명심해둘것.

    가리키는 인스턴스가 같아도 참조형 변수타입이 조상클래스타입이면 자손클래스 멤버들을 못쓰고

    참조형 변수 타입이 자손클래스이며 가리키는것도 자손클래스이면 그 멤버들을 다 쓸 수 있다.

     

    참조형변수에 인스턴스 생성시 참조형 변수가 인스턴스와 비교했을 때 쓸 수 있는 것 보다 같거나 적어야한다.

    우리는 무작정 그냥 형태만 외우고 객체생성만 해온거다

    ex) 주석 확인

    public class test {
    	public static void main(String[] args) {
    		test2 t2 = new test2();
    		t2.test21();
    		//test3 t3 = new test2(); << 이게안된다는거
    
    	}
    }
    class test3 extends test2{
    	String test31() {
    		return "say";
    	}
    }
    class test2{
    	String test21(){
        	return "hi";
        }
    }
    
    public class castingtest1 {
    	public static void main(String[] args) {
    		car c=null;
    		fireEngine fe=new fireEngine();
    		fe.water();
    		c=fe;//
    		c.drive();
    		//c.water();
    		//업캐스팅 fe는 자손 클래스 c는 조상클래스
    		//c.water(); 근데 이거는 car타입의 참조변수로는 호출할 수 없어
    		//왜냐면 fe안에 c가 있는거고 fe는 c로 형변환을 했으니 갯수도 당연히 c의 멤버개수로 줄었을거.
    		//참조변수 형이 달라서 인스턴스를 가리키는 건 똑같은데 참조변수 형때문에 못쓰는중이야
    		
    		fireEngine fe2=new fireEngine();
    		fe2=(fireEngine) c;
    		fe2.water();//다운캐스팅이니까 쓸 수 었어.
    		fe2.drive();
    		fe2.stop();
    	}
    }
    
    class car{
    	String color;
    	int door;
    	
    	void drive() {
    		System.out.println("drive, brrrrrr...");
    	}
    	void stop() {
    		System.out.println("stop!");
    	}
    }
    final class fireEngine extends car{
    	void water() {
    		System.out.println("water!");
    	}
    }
    

     

    읽는다고 열장짜리 읽었는데 마지막 문장이 요약을 끝냈다.

    전에 배운거처럼 조상타입의 인스턴스를 자손타입의 참조변수로 참조하는 것은 허용되지 않는다.

    서로 상속관계에 있는 타입간의 형변환은 양방향으로 자유롭게 수행될 수 있으나, 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 않는다.

    그래서 참조변수가 가리키는 인스턴스의 타입이 무엇인지 확인하는 것이 중요하다.

    ㄴ이건 다음에서 instanceof 연산자 배운다는 걸 암시한다.

     

    업캐스팅이랑 다운캐스팅은 별로 내용은 없어서 나만 알아볼 수 있게 메모형식으로 적었다.

    'Programming > JAVA' 카테고리의 다른 글

    abstract include interface(2)  (0) 2020.06.28
    abstract include interface  (0) 2020.06.27
    제어자  (0) 2020.06.13
    super  (0) 2020.06.12
    오버라이딩(overriding)  (0) 2020.06.09
Designed by Tistory.