/ / Wywołanie metody klasy abstrakcyjnej z konkretnej klasy bez rozszerzania - java, oop, abstract-class

Wywołanie metody klasy abstrakcyjnej z konkretnej klasy bez rozszerzenia - java, oop, klasa abstrakcyjna

Przykładowa klasa abstrakcyjna jest poniżej.

public abstract class Vehicle {
void maintain(String str) {
System.out.println(str);
}
}

Przykład konkretnej klasy jest poniżej.

public class Driver {
public static void main(String[] args) {

}
}

Teraz muszę uzyskać dostęp do metody keep bez rozszerzania klasy Vehicle. Czy istnieje sposób, aby to zrobić bez użycia zawartości statycznej?

Odpowiedzi:

1 dla odpowiedzi № 1

Nie, nie ma, bo maintain to jest metoda instancji. Aby wywołać metodę instancji, musisz mieć instancję. Nie można utworzyć instancji klasy abstrakcyjnej.

Możesz go sklasyfikować anonimowo (patrz w tym samouczku), ale nadal musisz go podklasować.


0 dla odpowiedzi nr 2

Nie możesz tego zrobić tak jak klasy abstrakcyjne abstrakcyjny. Również w twoim przypadku nie ma połączenia między Driver i Vehicle więc nawet gdybyś był w stanie skompilować ten kod (nie „t”), to ClassCastException pojawi się. Musisz najpierw rozszerzyć klasę abstrakcyjną, czy ci się to podoba, czy nie.


0 dla odpowiedzi № 3

Możesz użyć anonymous inner class. Użyłem twojego przykładowego kodu, ale także zdefiniowałem metodę anstract w Vehicle

public class AbstractTest {


public static void main(String[] args){
Vehicle v = new Vehicle() {
@Override
void myOtherAbstractMethod() {
// Do what you need here
}
};
v.maintain("foo");
}

public static abstract class Vehicle {

void maintain(String str) {
System.out.println(str);
}

abstract void myOtherAbstractMethod();
}
}