Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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_Findbugs - Fatal编程技术网

Java 匿名类能否实现抽象类的非抽象方法?

Java 匿名类能否实现抽象类的非抽象方法?,java,findbugs,Java,Findbugs,抽象类非抽象方法是否可以使用匿名类重写?。FindBugs工具正在发布“匿名类的不可调用方法”问题。有关更多信息,请查看下面的示例 public class BaseClass { // This class is a Library Class. } public abstract class AbstractBaseClass extends BaseClass { public abstract void abstractMethod(); public void

抽象类非抽象方法是否可以使用匿名类重写?。FindBugs工具正在发布“匿名类的不可调用方法”问题。有关更多信息,请查看下面的示例

public class BaseClass {
    // This class is a Library Class.
}

public abstract class AbstractBaseClass extends BaseClass {
    public abstract void abstractMethod();
    public void nonAbstractMethod() {}
}

public abstract class DerivedAbstractClass extends AbstractBaseClass {
   // Here Some more additional methods has been added
}

public class DemoAbstract {

    public static void main(String[] args) {
        init();
    }

    private static void init() {
        DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass() {
            @Override
            public void abstractMethod() {

            }

            @Override
            public void nonAbstractMethod() {
                 // Is it possible to override like this?
            }
        };
    }
}
是的,这是可能的。 您可以覆盖任何非最终、非静态方法

是的,这是可能的

原因

匿名类使您能够同时声明和实例化一个类,在示例代码中这是一行:(
DerivedAbstractClass DerivedAbstractClass=new-DerivedAbstractClass()

匿名类与本地类类似,只是它们没有名称

在下面的截图中,您正在扩展DerivedAbstractClass,可以为其抽象方法提供实现,如果需要,还可以重写非抽象方法

但是您可能需要调用
super.nonAbstractMethod()在覆盖之前,如下所示:

 DerivedAbstractClass derivedAbstractClass = new DerivedAbstractClass() {
                @Override
                public void abstractMethod() {
                //anonymous clas providing implemntation

                }

                @Override
                public void nonAbstractMethod() {
                super.nonAbstractMethod();
                //anonymous clas overriding      
                }
            };

是的,这是可能的。正是这个示例(复制并粘贴,没有任何更改)生成了警告吗?当然,您可以覆盖它,但即使不覆盖,匿名类仍然提供了一个实现,因此更好的问题是:匿名类是否可以不实现此方法?您好,immibis,我已经编辑了我的示例。请检查我下面的确切示例。我看不出问题。抱歉,这在定义侦听器时使用了很多(例如在Android的View.OnClickListener中)。我不能在JAVA中重写
main()
?它是静态的,但我可以!!但是,对于上面的代码,FindBugs报告了一个bug:这个匿名类定义了一个不直接调用的方法,并且不重写超类中的方法@朱奈德:不,你不能。@SarathUpadrista:我认为提供的代码没有任何问题。你能发布
DerivedAbstractClass
的内容吗?我想知道“FindBugs”报告的“匿名类的不可调用方法”的确切含义。被重写的方法如何是不可调用的?