Java 如果一个接口不能被实例化,那么在本例中如何从GoogleMaps团队传递接口对象?

Java 如果一个接口不能被实例化,那么在本例中如何从GoogleMaps团队传递接口对象?,java,android,google-maps,interface,Java,Android,Google Maps,Interface,编辑:将methodA更改为someMethod everywhere 在本教程中,定义了如下界面: public interface MyInterface{ public int someMethod(); public class ClassA implements MyInterface{ @Override public int someMethod(){ //codeA } }

编辑:将methodA更改为someMethod everywhere

在本教程中,定义了如下界面:

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?

如果不实例化接口,则实例化实现该接口的类。 使用对象的代码只需要知道接口,而不需要知道实现类


这就是方法调用中发生的情况。该方法知道参数实现了接口。它现在可以调用接口中定义的所有方法。实际获取调用的方法取决于实现类。如果我将ClassA的对象传递给该方法,将调用ClassA的methodA()。如果我传递一个ClassB对象,它将调用ClassB的methodA()。

这是基本的OO,我建议阅读一本关于这个主题的书,以进一步熟悉这些概念

为了回答您的问题,您没有实例化接口。实例化一个实现接口的类

在您提到的教程中,LatlInInterpolator从未实例化。 在示例代码之外,将实例化线性类线性固定类球形类

然后在某一点上,它们被传递给

 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。 除显式转换外,编译器确保您放入的对象必须实现此接口

这与您看到的教程非常接近


我认为有一件事让你感到困惑,那就是在接口内部,其他类正在被定义。这是一种常见的做法,你应该仔细阅读。(内部类,静态内部类)

您听说过多态性吗?请阅读:您在哪里看到“接口实例化”?我只看到一个带有接口类型的参数。也许你需要复习一下关于接口的教程<代码>多态性和
动态绑定
。您能回答第二个更重要的问题吗?在执行语句
myInterface.methodA()时,ClassA中的方法定义默认使用还是ClassB中的方法定义?好的,因此在插入标记时,我将实例化球形类并将球形对象传递给animateMarkerToGB()方法,对吗?是的,在调用需要插值器的方法之前,您需要构造一个球形插值器的实例,并将其传递。