假设我有一个接口A,定义如下:
public interface A {
public void a();
}
它包含一个名为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();
}
这上面会写着“做点什么”吗
5条答案
按热度按时间gc0ot86w1#
A
类型,但实际的Object
是AImpl
*。定义新接口时,即定义了新的引用数据类型。可以在任何可以使用任何其他数据类型名称的位置使用接口名称。如果定义了类型为接口的引用变量,则分配给它的任何对象都必须是实现该接口的类的示例。
阅读有关Documentation的更多信息
接口引用可以在实现A接口时保存AImpl的对象。
brjng4g32#
它取决于对象的运行时类型。请参阅:
这是您的界面:
这是你的课
还有另一种实现方式:
那么看看这个main方法:
qvsjd97n3#
您可能可以通过自己运行代码来发现这一点。
现在你会得到一个
NullPointerException
,因为你还没有给变量aa
赋值。把你的代码修改成下面的代码会调用这个方法并输出文本:7eumitmz4#
您需要在实际的
AImpl
对象上调用该例程这里等价于
您的示例将引发一个错误,因为您试图调用未初始化对象上的方法。
j91ykkif5#
不,我不会。
你已经声明了一个变量。你应该先用一个对象的示例初始化它,在这个例子中是你的类
AImpl
。