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
方法,因此如果调用它,则会得到原始的基类实现。