Java 从具体类调用抽象类的方法而不扩展

Java 从具体类调用抽象类的方法而不扩展,java,oop,abstract-class,Java,Oop,Abstract Class,下面是一个抽象类示例 public abstract class Vehicle { void maintain(String str) { System.out.println(str); } } public class Driver { public static void main(String[] args) { } } 下面是具体类的示例 public abstract class Vehicle { void maintain(S

下面是一个抽象类示例

public abstract class Vehicle {
    void maintain(String str) {
      System.out.println(str);
    }
}
public class Driver {
    public static void main(String[] args) {

 }
}
下面是具体类的示例

public abstract class Vehicle {
    void maintain(String str) {
      System.out.println(str);
    }
}
public class Driver {
    public static void main(String[] args) {

 }
}

现在我需要在不扩展Vehicle类的情况下访问maintain方法。有没有任何方法可以在不使用静态内容的情况下执行此操作?

没有,因为
maintain
是一个实例方法。要调用实例方法,必须有一个实例。不能创建抽象类的实例


您可以匿名对其进行子类化(请参阅),但仍然需要对其进行子类化。

您不能这样做,因为抽象类是抽象的。同样,在您的情况下,
驾驶员
车辆
之间没有连接,因此即使您能够编译该代码(您不会),也会显示
ClassCastException

您必须首先扩展抽象类,不管您喜欢与否。

您可以使用
匿名内部类。我使用了您的示例代码,但也在
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();
    }
}

“现在我需要在不扩展车辆类的情况下访问维护方法”为什么?这闻起来像是一种味道。尝试在没有实例的情况下调用实例方法是没有意义的,并且不能创建抽象类的实例。只能创建子类实例。
Vehicle-Vehicle=new-Driver()???同意“X/Y问题”。看起来您应该有一种特定类型的车辆供驾驶员使用。这个任务很奇怪,“司机”通常不是“车辆”的一种,所以我认为你脑子里有些东西搞混了。是的,我同意司机与车辆没有关系。但是,我们是否有任何情况需要驾驶员对车辆使用特定的方法?@ChamodPathirana:你不能像在其他语言中那样在Java中这样做。这个答案非常有用。谢谢。如果抽象类无法实例化,这里该如何做。Vehicle v=new Vehicle(),因为
new Vehicle(){…}
也是一个实现。