[英]Is it valid to call an abstract method on the super class in java
..如果是的话,这是什么行为? 我在最近看到的一些代码中遇到了这个问题,这让我非常困惑。 我没有java编译器,所以我不能轻易回答这个问题。 这是我所说的粗略的例子。 我希望这个结果出现编译错误,但据我所知,它来自一个正常工作的代码库。
abstract class Base {
...
abstract boolean foo(String arg);
}
class Sub extends Base {
...
boolean foo(String arg) {
if(condition)
return true;
else
return super.foo(arg); //<-- <boggle/>
}
}
不,如果它在超类中是抽象的,你就无法调用它。 尝试编译代码(修复其他代码)会出现此错误:
Test.java:13: abstract method foo(String) in Base cannot be accessed directly
return super.foo(arg); //<-- <boggle/>
^
当你把'超级'。 在方法名称之前,你对编译器说:'嘿,伙计! 调用在Base类中完全实现的方法。 它实际上并不存在,所以无法调用它和编译器抱怨。 只需删除'超级'。 离开'foo(arg);' 只要。 这将告诉编译器在某个子类中查找实现。
顺便说一句,如果你的例子中的条件总是假的,它会因为内存不足而进入不定式循环并崩溃:)
干杯,~r
那不会编译。 您无法调用抽象方法。
抽象方法不能被调用,因为它只是一个声明类型,没有定义就没有必要调用它。 因此编译时异常将发生
将您的示例放入Eclipse并对其进行编辑,以便实际编译远远会产生此错误:
“无法直接为类型Base调用抽象方法foo(String)”
你确定它来自“工作代码库吗?”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.