假设我有一个接口A,定义如下:
public interface A {
public void a();
}
它包含名为void a();
的方法
我有一个实现此接口的类,并且只有一个方法:
public class AImpl implements A {
@Override
public void a() {
System.out.println("Do something");
}
}
问:如果在主类中,我调用接口方法,它会调用属于实现接口的类的实现吗?
例如:
public static void main(String[] args){
A aa;
aa.a();
}
这个打印会“做点什么”吗?
发布于 2013-04-24 00:19:53
这取决于对象的运行时类型。请参见:
这是你的界面:
public interface A {
public void a();
}
这是你们的班级:
public class AImpl implements A {
public void a() {
println("I am AImpl");
}
}
还有另一个实现:
public class AnotherAImpl implements A {
public void a() {
println("I am another AImpl");
}
}
所以看一下this main方法:
public static void main(String[] args){
A aa;
aa = new AImpl();
aa.a(); // prints I am AImpl
aa = new AnotherAImpl();
aa.a(); // now it prints I am another AImpl
}
发布于 2013-04-24 00:14:03
您需要调用实际AImpl
对象上的例程
A aa = new AImpl();
aa.a();
它在这里相当于如下所示
AImpl aa = new AImpl();
aa.a();
您的示例将引发一个错误,因为您试图在未初始化的对象上调用一个方法。
发布于 2013-04-24 00:16:22
您可能会通过自己运行代码来发现这一点。
当前您将获得一个NullPointerException
,因为您还没有为变量aa
赋值任何内容。将您的代码更改为以下代码将调用该方法并输出文本:
public static void main(String[] args){
A aa = new AImpl();
aa.a();
}
https://stackoverflow.com/questions/16174260
复制相似问题