java中的接口回调
【接口回调】接口回调是多态的另一种体现。接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法。当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,成为接口回调。不同的类在使用同一接口时,可能具有不同的功能体现。即接口的方法体不必相同,因此接口回调可能产生不同的行为。
例如: interface People{
void peopleList();
}
class Student implements People{
public void peopleList(){
System.out.println("I am a student");
}
}
class Teacher implements People{
public void peopleList(){
System.out.println("I am a teacher");
}
}
public class TestMain()
{
public static void main(String args[])
{
People a; //声明接口变量
a=new Student(); //实例化 接口变量中存放对象的引用
a.peopleList(); //接口回调
a=new Teacher();
a.peopleList();
}
}
【结果】
I am a student
I am a teacher
Spring中的jdbcTemplate和HibernateTemplate使用的时候就用到了接口回调。
接口回调和向上转型:
向上转型: 例如: Shape s=new Circle();
这里创建了一个circle对象,并把得到的引用立即赋值给Shape,通过继承,circle就是一种Shape.
假如调用基类方法(它已在之类中被覆盖) s.draw();由于后期绑定(多态),将会正确调用circle.draw()方法。
java中的跨类引用
在java里面,关于跨类引用 有两条规则应该记住:
1.如果a是类A的一个引用,那么 a可以指向类A的一个实例。或者说指向类A的一个子类。这是向上转型的情况。
2.如果a是接口A的一个引用,那么 a必须指向实现了接口A的一个类的实例,这是接口回调的情形。
在java中向上转型是自动进行的,但是向下转型却需要强制转换。