gpt4 book ai didi

java - 覆盖方法,为什么我不能引用新的自己的方法?

转载 作者:行者123 更新时间:2023-11-29 03:43:52 25 4
gpt4 key购买 nike

我不明白这个:

OnGlobalLayoutListener listener = new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
System.out.println("I am override a method");
}

public void hello(){
System.out.println("This is a new method");
}
};

//listener.hello(); Why I cannot do it?

没有这个我也能做到:

new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
System.out.println("I am override a method");
}

public void hello(){
System.out.println("This is a new method");
}
}.hello();

为什么在第一种情况下我不能调用方法 hello() 而在第二种情况下我可以调用?

最佳答案

您正在创建一个新的匿名类型,使用一个名为 hello 的新方法。

您可以对表达式 new OnGlobalLayoutListener() { } 调用 hello,因为该表达式的类型您的新匿名类型。

不能listener 上调用hello,因为listener 的编译时类型是OnGlobalLayoutListener,它没有 hello 方法。

如果您想添加额外的方法,我个人建议您在当前类中创建一个新的嵌套类。您可以在方法中声明一个新的命名类,但我不建议这样做,只是考虑到它造成的困惑。

请注意,覆盖 onGlobalLayout 与问题完全无关。如果您尝试编写,您会看到相同的内容:

new Object {
public void hello() { ... }
}

关于java - 覆盖方法,为什么我不能引用新的自己的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11914493/

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