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()
是否有任何可见的操作?只需复制/粘贴当前代码并按预期工作即可。分享你的真实代码来发现你的特定错误。@杰瑞米考虑删除这个问题。是的,我已经发表评论说这个已经工作了。