Java 如果一个接口不能被实例化,那么在本例中如何从GoogleMaps团队传递接口对象?
编辑:将methodA更改为someMethod everywhere 在本教程中,定义了如下界面: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 } }
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()方法,对吗?是的,在调用需要插值器的方法之前,您需要构造一个球形插值器的实例,并将其传递。