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 № 1Nie, 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();
}
}