接口引用指向实现类的对象
接口引用指向实现类的对象
//定义接口InterfaceA interface InterfaceA { void fun(); } //实现接口InterfaceA的类Bimpl class Bimpl implements InterfaceA { public void fun() { System.out.println(“This is B”); } } //实现接口InterfaceA的类Cimpl class Cimpl implements InterfaceA { public void fun() { System.out.println(“This is C”); } } class Test { public static void main(String[] args) { InterfaceA a; a= new Bimpl(); a.fun(); a = new Cimpl(); a.fun(); } } //输出结果为: // This is B // This is C
为什么要用接口引用指向实现类的对象?
这种写法其实Java多态的表现形式(一个接口类型的引用变量来引用实现接口的类的实例,当这个引用调用方法时,它会根据实际引用的类的实例来判断具体调用哪个方法)
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
为什么一般都使用 接口引用指向子类对象 ,而不用 实现类本身 引用呢?
问题就在于接口可以有多个实现类,如果现在你使用这个实现类接收,也许哪一天你需要换成其它的实现类呢?
这时你只要将new的实现类对象换成你想要的就行了, 其它地方的代码根本不需要改动。
注意事项
没有在接口定义的方法(实现类增加的方法)是不可以被访问到的
在接口的实现类中该实现方法的类型和参数必须与接口中所定义的精确匹配。