繁体   English   中英

在java中的超类上调用抽象方法是否有效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM