为什么LocationListener有一个构造函数,如果它是一个接口?

时间:2017-04-15 14:04:38

标签: android constructor interface locationlistener

我已经看到界面中不允许使用构造函数,但这是如何允许的?:

locationListener = new LocationListener(){          等}}

2 个答案:

答案 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();

干杯!