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

时间:2018-03-31 16:22:10

标签: 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) {

 }
}

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

3 个答案:

答案 0 :(得分:1)

不,没有,因为maintain实例方法。要调用实例方法,您必须具有实例。您无法创建抽象类的实例。

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

答案 1 :(得分:0)

你不能这样做,因为抽象类是抽象。同样在你的情况下,DriverVehicle之间没有联系,所以即使你能够编译那些代码(你也不会),那么ClassCastException就会出现。 你必须首先扩展抽象类,不管你喜不喜欢。

答案 2 :(得分:0)

您可以使用anonymous inner class。我已经使用了您的示例代码,但也在Vehicle

中定义了一个anstract方法
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();
    }
}