gpt4 book ai didi

java - 父类中匿名内部类的调用方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:55:29 26 4
gpt4 key购买 nike

我在网上浏览匿名内部类时遇到了以下疑问

这是 Original我下载并正在解决它的代码(请仅针对我的问题引用下面的代码)。

按照上面的链接,他们说我们不能在匿名内部类中重载和添加额外的方法。

但是当我编译下面的代码时它工作正常,尽管我无法在内部类之外调用那些公共(public)方法。

起初我很惊讶为什么我不能访问内部类之外的公共(public)方法,但后来我意识到这个对象是由不知道这样的函数调用的“父”类引用持有的。

我可以在下面的代码中做哪些更改以在内部类外部调用重载方法和新方法?

class TestAnonymous
{

public static void main(String[] args)
{
final int d = 10;

father f = new father(d);

father fAnon = new father(d){
// override method in superclass father
void method(int x){
System.out.println("Anonymous: " + x);
method("Anonymous: " + x); //This Compiles and executes fine.
newMethod(); //This Compiles and executes fine.
}

// overload method in superclass father
public void method(String str) {
System.out.println("Anonymous: " + str);
}

// adding a new method
public void newMethod() {
System.out.println("New method in Anonymous");
someOtherMethod(); //This Compiles and executes too.
}

};

//fAnon.method("New number"); // compile error
//fAnon.newMethod(); // compile error - Cannot find Symbol

}

public static final void someOtherMethod()
{
System.out.println("This is in Some other Method.");
}

} // end of ParentClass

class father
{
static int y;

father(int x){
y = x;
this.method(y);
}

void method(int x){
System.out.println("integer in inner class is: " +x);
}
}

最佳答案

你不能用匿名类做到这一点;它与 Java 的静态类型系统冲突。 从概念上讲,变量fAnonfather 类型,它没有.method(String).newMethod 方法。

你想要的是 father 的普通(命名)子类:

class fatherSubclass extends father
{ /* ... */ }

你应该声明你的新变量

fatherSubclass fAnon = new fatherSubclass(d)

关于java - 父类中匿名内部类的调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10895677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com