Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中对超类调用抽象方法有效吗_Java_Abstract_Super - Fatal编程技术网

在java中对超类调用抽象方法有效吗

在java中对超类调用抽象方法有效吗,java,abstract,super,Java,Abstract,Super,…如果是这样,行为是什么? 我在最近看的一些代码中遇到了这个问题,这让我很困惑。我没有java编译器,所以我自己无法轻松回答这个问题。这是我所说的一个粗略的例子。我希望这会导致编译错误,但据我所知,这是一个工作代码库 abstract class Base { ... abstract boolean foo(String arg); } class Sub extends Base { ... boolean foo(String arg) {

…如果是这样,行为是什么? 我在最近看的一些代码中遇到了这个问题,这让我很困惑。我没有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/>
    }
}
抽象类基类{
...
抽象布尔foo(字符串arg);
}
类子扩展基{
...
布尔foo(字符串arg){
如果(条件)
返回true;
其他的

返回super.foo(arg);//否,如果它在超类中是抽象的,则无法调用它。尝试编译代码(修复了其他代码)会出现以下错误:

Test.java:13: abstract method foo(String) in Base cannot be accessed directly
            return super.foo(arg); //<-- <boggle/>
                        ^
Test.java:13:Base中的抽象方法foo(String)无法直接访问

返回不会编译的super.foo(arg);//。您不能调用抽象方法。

将示例扔进Eclipse并编辑它,使其实际编译,到目前为止会产生以下错误:

Test.java:13: abstract method foo(String) in Base cannot be accessed directly
            return super.foo(arg); //<-- <boggle/>
                        ^
“无法直接调用类型基的抽象方法foo(字符串)”


你确定它来自“工作代码库”吗?

当你在方法名称前加上“super”时,你对编译器说:“嘿,伙计!调用在基类中完全实现的方法”。它实际上不存在,因此无法调用,编译器会抱怨。只需删除“super”,并保留“foo(arg)这将告诉编译器在某个子类中查找实现

顺便说一句,如果示例中的条件始终为false,它将进入不定式循环并由于内存不足而崩溃:)


干杯,~r

抽象方法不能被调用,因为它只是一个声明类型,没有定义调用它是没有意义的。因此编译时异常将发生

这就是我所想的,谢谢。正如我所说,我没有编译器,直接在代码窗格中键入代码(我不是Java开发人员)考虑StrusAy抽象类A- > B类扩展A并实现Fo-> C,现在可以从C中实现it@Jigar这显然不是问题中所显示的。这不是调用抽象方法——它调用了在超类中实现的一种具体方法。同意,但是当我回答代码是用C++编写的,我想。这只是为了演示这个场景,所以我用那种方式写了它,然后还打败了:)不管怎样,你的答案是perfect@Jigar:我不会说它是“用C++编写的”-它使用“:”而不是“扩展”但仅此而已。其他所有内容都是基于Java的,包括标记和问题标题:)被编辑以删除我是C#开发人员的证据。不,我不确定。我无法轻松验证它,这就是我问的原因。谢谢。