我实例化了一个匿名类的对象,并向其中添加了一个新方法。
Date date = new Date() {
public void someMethod() {}
}
我想知道是否可以从外部调用此方法,类似于:
date.someMethod();
最佳答案
好问题。答案是否定的。您不能直接调用 date.someMethod();
我们先来了解一下这是什么。
Date date = new Date() { ... };
上面是匿名(没有名字)子类,它扩展了 Date 类。
当您看到如下代码时,
Runnable r = new Runnable() {
public void run() {
}
};
这意味着您已经定义了匿名(没有名称)类,该类正在实现(而不是扩展)Runnable 接口(interface)。
所以当你调用date.someMethod()
时它无法调用,因为 someMethod
未在 superclass.
中定义在上面的例子中,父类(super class)是 Date
类(class)。它遵循简单的覆盖规则。
但是如果你想打电话 someMethod
然后是以下步骤。
第一种方式>
使用引用变量 ' date
'
date.getClass().getMethod("someMethod").invoke(date);
第二种方式>
使用新创建的 Date 类对象的匿名子类。
new Date()
{
public void someMethod() {
System.out.println("Hello");
}
}.someMethod(); //this should be without reference 'date'
关于java - 从匿名类调用新定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60351461/