我已经看到界面中不允许使用构造函数,但这是如何允许的?:
locationListener = new LocationListener(){ 等}}
答案 0 :(得分:2)
是的,你是正确的接口不能有构造函数,但你所描述的是匿名类。在这一行中,您创建的是没有名称的新类的对象,它扩展了LocationListener(并且它的实现在大括号之间)。 如果您想了解更多有关匿名类的信息,请查看此处:https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
答案 1 :(得分:1)
这是匿名类方法。为了说清楚,这是一个例子。
interface Animal {
public void cry();
}
要创建Animal实例的对象,首先需要实现Animal接口。
class Lion implements Animal {
public void cry() {
System.out.println("Roar");
}
}
然后使用通常的方法创建一个对象:
Animal theLion = new Lion();
另一种方法是使用Anonymous类创建一个Animal对象。
Animal theTiger = new Animal() {
public void cry() {
System.out.println("Grrr");
}
}
现在,两个对象都应该能够将cry
方法称为:
theLion.cry();
theTiger.cry();
干杯!