2012-04-08 6 views
3

메신저는 현재 안드로이드 프로그래밍에 관한 책을 읽었으며 처음 장에서 Java에 대한 유용한 참조 가이드가 있습니다. 그러나 필자는 필자가 이해하지 못했던 암시 적 매개 변수에 대해 무언가를 압도했다.Java 암시 적 메소드/매개 변수?

public class Car { 
    public void drive() { 
    System.out.println("Going down the road!"); 
    } 
} 

그리고 그는이와 함께 계속된다 :

public class JoyRide { 
private Car myCar; 

public void park(Car auto) { 
    myCar = auto; 
} 

public Car whatsInTheGarage() { 
    return myCar; 
} 

public void letsGo() { 
    park(new Ragtop()); // Ragtop is a subclass of Car, but nevermind this. 
    whatsInTheGarage().drive(); // This is the core of the question. 
} 
} 

난 그냥 우리가 클래스 자동차에서 드라이브()를 호출 할 수있는 방법을 알고 싶어

그는 클래스 자동차을 정의JoyRide자동차의 확장명이 아닙니다. 그것은 whatsInTheGarage() 메소드가 타입이므로, "어떻게 든"그 클래스로부터 상속을 받기 때문입니까?

감사합니다.

whatsInTheGarage().drive(); 

속기로이에 대한 :

답변

7

코드의이 작품에 대해 생각

Car returnedCar = whatsInTheGarage(); 
returnedCar.drive(); 

는 지금 분명히인가? 모두 C와 같은과 같은 구문은 다음과 같이 작동합니다.

UPDATE :

myCar.drive(); //call method of myCar field 

Car otherCar = new Car(); 
otherCar.drive(); //create new car and call its method 

new Car().drive() //call a method on just created object 

public Car makeCar() { 
    return new Car(); 
} 

Car newCar = makeCar(); //create Car in a different method, return reference to it 
newCar.drive(); 

makeCar().drive(); //similar to your case 
+0

Java가 C와 유사한 언어라고 말하지 않습니다. –

+0

@AshBurlaczenko : 구문에 대해 말하고 있었는데, C, C++, C#, Java, JavaScript 같은 언어를 의미했습니다 ... - 명확히 할 것입니다 –

+0

그래서 그 뜻입니다. Car 유형의 myCar가 whatsInTheGarage에서 반환되므로 반환 된 값에서 Car 유형의 메서드를 호출 할 수 있습니다 ..? 하지만 이해가 안되네요. 차라리 물건을 돌려주는 것도 아니고, 당신의 예에서는 돌려 보내지도 않았습니다. 차의 인스턴스입니다. 차의 변수 일뿐입니다. – yackyackyack

0

당신의 가정은 방법은 자동차를 반환 이후는 자동차 메서드를 호출 할 수 있습니다, 맞습니다.

3

whatsInTheGarageCar을 반환합니다. 리턴하는 인스턴스에서 drive을 호출 중입니다. JoyRide이 메서드를 상속받는 것이 아니라 JoyRide이 완전히 별도의 개체에서 메서드를 호출하고 있습니다. 라인

whatsInTheGarage().drive() 

객체가 whatsInTheGarage에서 반환에 당신은 drive 방법을 호출에서

3

. JoyRide 자체가 Car과 관련이 없다는 사실은 JoyRide 개체에서 drive을 호출하지 않으므로 여기서는 적합하지 않습니다. whatsInTheGarage이을 반환하고 whatsInTheGarage에서 반환 된 개체에 drive을 호출하면 Car 개체에서 drive이 호출됩니다. 특히 CarwhatsInTheGarage으로 반환됩니다. 이것은 상속과는 아무런 관련이 없습니다. 대신에 그 메소드를 명시 적으로 선언 한 클래스 유형의 객체에 대한 메소드를 호출하는 것입니다.

희망이 도움이됩니다.

+0

이것은 내게 많은 감각을주었습니다. 나는 그 객체가 코드에서 실제로 인스턴스화되었다는 것을 간과 한 것을 깨달았다. 그래서 나는 uninstantiated 객체에서 drive()가 어떻게 호출 될 수 있는지를 알 수 없었다. :) – yackyackyack

0

Joyride 클래스에는 Car 유형의 필드가 있다는 것을 잊지 마십시오. 이 필드를 사용하면 Car 클래스의 메서드를 이러한 이유로 호출 할 수 있습니다.