강의로 돌아가기
노영우

형 변환시점이 언제인지 구체적으로 알고 싶습니다.

부모객체를 fill 메소드의 변수로 사용함으로써 자동적으로 부모객체가 자식객체 타입으로 형변환이 일어난다는 것인가요?

아님 그냥 부모객체를 변수로 사용했으니, 자식은 상속받기 때문에 메소드 변수로 사용할수 있다는 말인가요?

형변환을 할려면

        Bus bus = (Bus)car;  //부모타입을 자식타입으로 형변환 
        이 소스가 존재해야지 부모객체도 자식객체의 메소드를 이용할수 있었던게 아닌가요?

위의 코드는 부모객체가 자식타입의 메소드나 변수를 사용할수 있게 형변환하는 소스는 없는게 아닌가요?

작성중인 코드―Car.java
1
2
3
public class Car{
    public int gas;
}
작성중인 코드―Suv.java
1
2
public class Suv extends Car{
}
작성중인 코드―Truck.java
1
2
public class Truck extends Car{
}
작성중인 코드―Bus.java
1
2
public class Bus extends Car{
}
작성중인 코드―GasStation.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class GasStation{
    public static void main(String[]args){
        GasStation gasStation = new GasStation(); //gasStation인스턴스 생성
        Suv suv = new Suv(); //suv 인스턴스 생성
        Truck truck = new Truck(); //truck 인스턴스 생성
        Bus bus = new Bus(); //bus 인스턴스 생성

        //gasStation에서 suv에 기름을 넣습니다.
        gasStation.fill(suv);

        //gasStation에서 truck에 기름을 넣습니다.
        gasStation.fill(truck);

        //gasStation에서 bus에 기름을 넣습니다.
        gasStation.fill(bus);

    }


    public void fill(Car car){
        //참고. car.getClass().getName()은 car오브젝트가 실제로 어떤 클래스인지를 알려줍니다.
        System.out.println(car.getClass().getName()+"에 기름을 넣습니다.");

        car.gas += 10;
        System.out.println("기름이 "+car.gas+"리터 들어있습니다.");
    }
}
1 개의 답변
노영우

형변환 부분이 정말 헤깔리고 이해가 되지 않아,질문드립니다.

  • 김동현
    형변환이 아니라 extends로 부모클래스의 gas인스턴스를 자식클래스들에 상속시켜줘서 사용할 수 있는것 같습니다 김동현 2018.08.04 22:39
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.