什么是接口回调?
一、接口回调是什么?
接口回调是指:能够把使用某一接口的类建立的对象的引用赋给该接口声明的接口变量,那么该接口变量就能够调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。java
interface People { void peopleList(); } class Student implements People { public void peopleList() { System. out .println( "I’m a student." ); } } class Teacher implements People { public void peopleList() { System. out .println( "I’m a teacher." ); } } public class Example { public static void main(String args[]) { People a; // 声明接口变量 a = new Student(); // 实例化,接口变量中存放对象的引用 a.peopleList(); // 接口回调 a = new Teacher(); // 实例化,接口变量中存放对象的引用 a.peopleList(); // 接口回调 } }
结果:ide
I’m a student.code
I’m a teacher.对象
2.什么是向上转型?继承
Shape s=new Circle(); 接口
这里,建立了一个Circle对象,并把获得的引用当即赋值给Shape。经过继承,Circle就是一种Shape。
假设你调用基类方法(它已在导出类中被覆盖):
s.draw(); ast
因为后期绑定(多态),将会正确调用Circle.draw()方法。
3.Java中的跨类引用
在java里面,关于跨类引用,有两条规则应该记住:
1)若是a是类A的一个引用,那么,a能够指向类A的一个实例。或者说指向类A的一个子类,这是向上转型的情形。
2)若是a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。这是接口回调的情形。
在java里面,向上转型是自动进行的,可是向下转型却不是,class
须要咱们本身定义强制进行.
class B extends A{}
publicclass A {
publicstaticvoid main(String[] argts){
A a1=new A();
A a2=new B();//Upcasting向上转型
B b1=new B();
B b2=(B) new A();//DownCasting向下转型,[注意]:此处(B)进行了强制转换!
}
} 变量
三、向上转型与接口回调的区别List
向上转型是对象之间转型,与接口回调形式相似担心本质不一样。
从实现了某接口的对象,获得对此接口的引用,与向上转型为这个对象的基类,实质上效果是同样的。这些对象均可以调用基类型提供的方法,对于接口来讲就是回调接口中的方法,对于父类来讲就是调用父类的方法。固然在向上转型的状况下,还牵涉到子类重写( Override )父类方法的情形。