编辑:将methodsA更改为someMethod无处不在
在this教程中,界面定义如下:
public interface MyInterface{
public int someMethod();
public class ClassA implements MyInterface{
@Override
public int someMethod(){
//codeA
}
}
public class ClassB implements MyInterface{
@Override
public int someMethod(){
//codeB
}
}
}
然后他们在另一个类的方法中传递了上述接口的实例,如下所示:
public class MyAnimationClass{
static void animate(final MyInterface myInterface){
myInterface.someMethod();
}
}
接口的实例化如何工作?此外,在语句myInterface.someMethod();
中,someMethod()
默认调用哪个类 - ClassA或ClassB?
答案 0 :(得分:0)
您不实例化接口,实例化实现接口的类。 使用该对象的代码只需要知道接口,而不是实现类。
这是方法调用中发生的情况。该方法知道该参数实现了该接口。它现在可以调用接口中定义的所有方法。实际调用哪种方法取决于实现类。如果我将ClassA的对象传递给方法,则将调用ClassA的methodA()。如果我传递一个ClassB对象,它将调用ClassB的methodA()。
答案 1 :(得分:0)
这是基本的OO,我建议您阅读有关该主题的书籍,以进一步熟悉这些概念。
要回答您的问题,请不要实例化界面。您实例化一个实现接口的类。
在您提到的教程中,LatLngInterpolator从未实例化。 在示例代码之外,实例化线性, LinearFixed 或球形 类。
然后在某些时候他们被传递到
static void animateMarkerToHC(final Marker marker, final LatLng finalPosition, final LatLngInterpolator latLngInterpolator)
只能看到它的接口方面的方法。
您可以在本地计算机上运行的简单示例:
public class InterfaceExample {
public static void main(String[] argv) {
PrintApple applePrinter = new PrintApple();
PrintPear pearPrinter = new PrintPear();
printObject(applePrinter);
printObject(pearPrinter);
}
public static void printObject(PrintInterface p) {
p.printMe(System.out);
}
public static interface PrintInterface {
public void printMe(PrintStream p);
}
public static class PrintApple implements PrintInterface {
public void printMe(PrintStream p) {
p.println("apple");
}
}
public static class PrintPear implements PrintInterface {
public void printMe(PrintStream p) {
p.println("pear");
}
}
}
观察到只要printObject方法可以检测到它就获得PrintInterface。 编译器确保显式转换,您输入的对象必须实现此接口。
这非常接近您所看到的教程。
我认为你困惑的一件事是在界面内部,其他类被定义。这是您应该阅读的常见做法。 (内部类,静态内部类)