Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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_Anonymous Class - Fatal编程技术网

Java 匿名类不';行不通

Java 匿名类不';行不通,java,anonymous-class,Java,Anonymous Class,我目前在匿名方法重写和继承方面遇到了一个奇怪的问题。很难解释清楚,因此首先是我的代码的一个表示: public abstract class A { public void draw() { someAction(); } } public class B extends A { // Other methods } ArrayList< A > listA = new ArrayList< A >(); B objectB =

我目前在匿名方法重写和继承方面遇到了一个奇怪的问题。很难解释清楚,因此首先是我的代码的一个表示:

public abstract class A {
    public void draw() {
        someAction();
    }
}

public class B extends A {
    // Other methods
}

ArrayList< A > listA = new ArrayList< A >();
B objectB = new B() {
    @Override
    public void draw() {
        someActionOverriden();
    }
}
listA.add( objectB );

for( A item : listA ) {
    item.draw();
}
公共抽象类A{
公众抽签(){
someAction();
}
}
公共类B扩展了A{
//其他方法
}
ArrayListlistA=新的ArrayList();
B objectB=新的B(){
@凌驾
公众抽签(){
someActionOverride();
}
}
listA.add(objectB);
对于(项目:列表A){
item.draw();
}
问题是,匿名重写的
draw()
方法永远不会被调用。我想这可能是因为
属于
A类
,因此它从不使用匿名方法,但有没有办法实现这种设计


编辑:另一件事:如果我尝试
objectB.draw()
,将调用匿名方法

问题在于代码未显示。此代码适用于:

private static abstract class A {

    public void draw() {
        System.out.println("A");
    }
}

private static class B extends A {
    // Other methods
}

public static void main(String[] args) {
    ArrayList< A> listA = new ArrayList< A>();
    B objectB = new B() {
        @Override
        public void draw() {
            System.out.println("B");
        }
    };
listA.add(objectB);

    for (A item : listA) {
        item.draw();
    }
}
私有静态抽象类A{
公众抽签(){
系统输出打印项次(“A”);
}
}
私有静态类B扩展了{
//其他方法
}
公共静态void main(字符串[]args){
ArrayListlistA=新的ArrayList();
B objectB=新的B(){
@凌驾
公众抽签(){
系统输出打印项次(“B”);
}
};
listA.add(objectB);
对于(项目:列表A){
item.draw();
}
}

如果删除编译器错误,它将正常工作。当前您的
B
类未扩展类
A
。因此,
listA.add
无法编译。事实上,这只是一个打字错误;)这应该行得通。您的
someActionOverride()
是否有任何可见的操作?只需复制/粘贴当前代码并按预期工作即可。分享你的真实代码来发现你的特定错误。@杰瑞米考虑删除这个问题。是的,我已经发表评论说这个已经工作了。