강의로 돌아가기
-

이해가안되요

gasStation.fill(suv);
fill 메소드를 호출하는데 매개변수를 객체로 넘기는데 왜
fill(Car car)이 메소드가 실행이되죠??
Car 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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(Suv suv){
        System.out.println("Suv에 기름을 넣습니다.");
        suv.gas += 10;
        System.out.println("기름이 "+suv.gas+"리터 들어있습니다.");
    }

    public void fill(Truck truck){
        System.out.println("Truck에 기름을 넣습니다.");
        truck.gas += 10;
        System.out.println("기름이 "+truck.gas+"리터 들어있습니다.");
    }

    public void fill(Bus bus){
        System.out.println("Bus에 기름을 넣습니다.");
        bus.gas += 10;
        System.out.println("기름이 "+bus.gas+"리터 들어있습니다.");
    }

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

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

Suv, Truck, Bus는 Car를 상속 받았죠. 다시 말하면 Suv, Truck, Bus는 gas라는 필드를 가지고 있습니다.(부모-Car-에게 물려 받았죠.)

주석에 있는 'fill(Car car)' 메소드를 실행시키면 인자가 꼭 Car가 아니고 상속받은 Suv, Truck, Bus 클레스들도 인자로 넘길 수 있습니다.

왜냐면 상속 되었기 때문이죠. is a 관계이기 때문이고요.

그래서 주석되어진 함수를 실행 - fill(truck) - 하면 truck에 있는 gas 필드에 10이 더해지는것이죠.(실질적으로 gas는 부모인 Car의 것이죠. 하지만 물려 받았으니 내꺼~)

  • -
    Car클래스를 매개변수로 받으면 Car를 부모로 가지는 자식클래스들도 매개변수로 사용가능하다... 이뜻인가요?
    -―2017.08.18 11:24
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.