Określenie, z jakiego obiektu mają być wywołane metody.

0

Cześć.

Jestem zupełnie początkujący i mam problem, którego nijak nie mogę rozwiązać, a może i zrozumieć.

Mam prosty kod, który tylko wyświetla komunikaty:

import java.util.*;
import java.lang.*;
import java.io.*;

interface Vehicle {
 
	void run();
	
	default void speedUp() {
	    System.out.println(getClass().getName() + " acceleration...");
	    System.out.println();
	}

}
 
class Car implements Vehicle {
    
	public void run() {
	    System.out.println("Go, Car, go! ;)");
	}
	
}
 
class Motorbike implements Vehicle {
 
	public void run() {
	    System.out.println("Go, Motorbike, go! ;)");
	}
	
}
 
class Application {
    
	public static void main(String args[]) {
	    
	    Vehicle car = new Car();
	    car.run();
	    car.speedUp();
	    
	    Vehicle motorbike = new Motorbike();
	    motorbike.run();
	    motorbike.speedUp();
	    
	}
 
}

Chciałbym każde wywołania metod run() i speedUp() dla odpowiednich obiektów (obecnie car i motorbike) zamienić na wywołanie jednej metody, np. vehicle() umieszczonej bezpośrednio w klasie Application.

Metoda vehicle() może mieć np. następujący kod:

public void vehicle(Vehicle vehicle) {
        vehicle.run();
        vehicle.speedUp();
    }

Ale wtedy wywołanie car.vehicle(car) nie działa.

Próbowałem na różne sposoby i nic nie mogę wymyślić. Wiem, że konieczne jest określenie, z jakiego obiektu tamte dwie metody mają być wywołane.

Jak przekazać nazwę (obiekt) car, motorbike i ew. inne do metody vehicle(), żeby poprawnie wywołała ona metody run() i speedUp() dla odpowiednich obiektów?

1

Jak objawia się to że nie działa?

Jeśli chciałbyś metodę vehicle wywołać z metody main to musi być ona statyczna.

0

Pojawiają mi się takie błędy (tzn. ten sam dwa razy):

cannot find symbol symbol: method vehicle(Vehicle) location: variable car of type Vehicle, line 42 
cannot find symbol symbol: method vehicle(Vehicle) location: variable motorbike of type Vehicle, line 45 

A określenie metody vehicle() jako statycznej (public static void lub static void) nic nie zmienia, po próbie uruchomienia pojawiają się te same błędy.

1

Jak Chcesz mieć taką metodę w klasie Application i wołać ją z maina, to Zrób sobie metodę statyczną:

public static void vehicle(Vehicle vehicle) {
        vehicle.run();
        vehicle.speedUp();
    }
 public static void main(String args[]) {

        Vehicle car = new Car();
      
        vehicle(car);

    }

0

Wielkie dzięki! Działa :-)
Teraz będę musiał tylko zrozumieć, dlaczego :-)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.