有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?

Posted

技术标签:

【中文标题】有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?【英文标题】:Is there a way to invoke a non-overridden or non-implemented method in an anonymous class outside of its definition? 【发布时间】:2021-12-22 09:53:51 【问题描述】:

Phone 接口中有 3 个方法签名,所有这些都在智能手机的匿名类定义中实现。但是,我希望匿名类具有 Phone 接口中不存在的另一种方法。

有人可以帮我理解如何在匿名类定义之外调用该方法吗?

如果可能,您能否告诉我在文档中的何处可以找到它?

public class App 
    public static void main(String[] args) throws Exception 
        Phone smartPhone = new Phone() 
            @Override
            public void turnOn()  System.out.println("Turning on..."); 

            @Override
            public void turnOff()  System.out.println("Turning off..."); 
            
            @Override
            public void makeCall()  System.out.println("Calling..."); 

            public void launchCamera()  System.out.println("Launching camera...");             
            
        ;

        // smartPhone.launchCamera(); -> This does not work...

    

【问题讨论】:

@GhostCat - 是的,你是对的。删除了我的评论。 【参考方案1】:

有趣的事实:var 关键字可以让你到达那里。

你看,当你这样做时:

SomeType myVar = new SomeType()  ...

然后编译器采用“简单”路线,并且只记住:myVar 的类型为 SomeType

但是当你这样做时:

var myVar = new SomeType()  ...

那么编译器实际上会确定右侧定义的非常具体的特殊类型。然后任何额外定义的方法实际上都是“可见的”,你可以调用它。

有关更多详细信息,请参阅 JavaSpecialists 时事通讯的 edition。

【讨论】:

有趣...我会试一试。谢谢

以上是关于有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?的主要内容,如果未能解决你的问题,请参考以下文章

SDL2 丢失 OpenGL 上下文或未定义函数

内部类和匿名内部类的用法

如何在其派生类中覆盖列表的切片功能

Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义

mfp cordova:此cordova子命令的实现失败或未提供:未定义

delphi中覆盖override父类的静态方法和虚函数有啥不同?