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

Odpowiedz Nowy wątek
2019-01-06 23:27
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?

Pozostało 580 znaków

2019-01-06 23:43
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.

Pozostało 580 znaków

2019-01-06 23:48
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.

robisz w takim razie jakiś głupi błąd, wrzuć klasę Application ze wskazaniem które to linie 42 i 45 - mdolata 2019-01-07 00:05

Pozostało 580 znaków

2019-01-06 23:52

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);

    }

Pozostało 580 znaków

2019-01-07 00:08
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0