示例抽象类如下所示。
public abstract class Vehicle {
void maintain(String str) {
System.out.println(str);
}
}
示例具体类别如下。
public class Driver {
public static void main(String[] args) {
}
}
现在我需要在不扩展Vehicle类的情况下访问维护方法。有没有办法在不使用静态内容的情况下执行此操作?
答案 0 :(得分:1)
不,没有,因为maintain
是实例方法。要调用实例方法,您必须具有实例。您无法创建抽象类的实例。
您可以匿名对其进行子类化(请参阅this tutorial),但您仍需要对其进行子类化。
答案 1 :(得分:0)
你不能这样做,因为抽象类是抽象。同样在你的情况下,Driver
和Vehicle
之间没有联系,所以即使你能够编译那些代码(你也不会),那么ClassCastException
就会出现。
你必须首先扩展抽象类,不管你喜不喜欢。
答案 2 :(得分:0)
您可以使用anonymous inner class
。我已经使用了您的示例代码,但也在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();
}
}