Java 不使用子类对象调用抽象超类的方法

Java 不使用子类对象调用抽象超类的方法,java,overloading,Java,Overloading,假设有一个抽象的超类,其中只有一个方法具有默认实现。现在,子类正在扩展超类,它覆盖了超类的方法 如何在不使用子类对象的情况下调用超类的方法 public abstract class SuperClass { public void test() { System.out.println("SuperClass test method called"); } } public class SubClass extends SuperClass { p

假设有一个抽象的超类,其中只有一个方法具有默认实现。现在,子类正在扩展超类,它覆盖了超类的方法

如何在不使用子类对象的情况下调用超类的方法

public abstract class SuperClass
{
    public void test()
    {
      System.out.println("SuperClass test method called");
    }
}

public class SubClass extends SuperClass
{
    public void test()
    {
      System.out.println("SubClass test method called");
    }
}

public class CallAbstract
{
     public static void main(String[] args)
     {
        //How to Call abtract SuperClass test method without using sub class object?
     }
}

您需要另一个不覆盖
test()
方法的子类

public class OtherSubClass extends BaseClass {

}
在您的
main
方法中:

OtherSubClass osc = new OtherSubClass();
osc.test();

或者使用一个匿名类,就像Edwin Dalorzo建议的那样。

使用另一个匿名类,您可以:

public class CallAbstract
{
   public static void main(String[] args)
   {
      (new BaseClass(){ }).test();
   }
}

超类扩展基类
。这在逻辑上不应该是
子类扩展基类
?是的,这个例子是反直觉的,顺便问一下,
摘要
在哪里?谢谢,Edwin。我试过你的密码。但有一个疑问,若我们不能创建抽象类的实例,那个么我们怎么能编写新的BaseClass()代码呢。请详细说明一下,因为下面的
{}
创建了一个匿名子类,它根本不覆盖任何方法。因此,他没有实例化抽象类,而是扩展了
BaseClass
但没有名称的类。这是正确的,正如jlordo所说,表达式
new BaseClass(){}
正在内联定义一个新类,同时创建它的实例。由于这个新的内联类不会覆盖
test
方法,因此如果调用它,则会得到原始的基类实现。