当前位置: 首页 > 知识库问答 >
问题:

我怎么能调用额外的方法,我在匿名类定义?

龙兴学
2023-03-14

我的示例显示,我试图向Runnable匿名类添加一些额外的方法,通常我如何调用我创建的额外方法。

Runnable myRunnable = new Runnable()
{
    public void run()
    {
        System.out.println("Running");
    }
    // any  extra method to explain the question 
    public void a()
    {
        System.out.println("A");
    }

};
myRunnable.run();
myRunnable.a(); // is this right??

共有1个答案

袁智明
2023-03-14

你为什么能做这样的事?您的myRunnable对象属于java类型。lang.Runnable。除了已经存在的方法,它没有其他方法。Java在运行时无法知道分配给myRunnable的实际对象实际上是您自己的实现。

但是,你可以这样做:

class MyRunnable implements Runnable {
    @Override
    public void run() { }
    public void myMethod() { }
}

然后

MyRunnable mr = new MyRunnable();
mr.myMethod();
 类似资料:
  • 在中定义额外的方法(不重写超类方法)时,代码编译良好,没有任何问题,但如果我试图调用额外的方法,它会抛出错误。那么,在使用扩展时,是否只有在子类中的方法才可能?如果是这样,谁能解释一下为什么? 下面是我的代码的样子 这就是我得到的错误

  • 问题内容: 最近,我遇到了一个神秘的问题,在Android项目,我描述了这里。我以某种方式解决了问题,但仍然不知道其背后的确切原因。 假设我想在内部类中调用函数foo()。问题是,直接调用它有什么区别 或使用外部类实例对其进行调用 此外,如果有人能检查我与此相关的最后一个问题,并向我提供有关错误发生原因的线索,我将不胜感激。非常感谢。 PS:我在某处读到,非静态内部类将始终持有外部类的实例。因此,

  • 在这个解决方案中,我可以调用void中的变量。当我试图在void之外调用它时,数据是空的。 但我只想知道,为什么我的代码一开始就不能工作?谢谢。

  • 作为一个初学者,我想知道为什么我的仅在放在主块内时有效? 当我有这样的代码时,我不能调用该方法。 方法调用类: 包含以下方法的类:

  • Lambda表达式必须转换为函数接口。据我所知,他们不能扩展一个类,但我想知道是否有办法得到类似的东西。 我有

  • 下面是匿名内部类的示例,我们使用A创建匿名类 我的问题是我们可以将 设置为匿名(而不是其内部匿名类),即包含公共静态 void main 方法的简单类。