二者实质上效果是一样的。
1.接口回调是什么[2]?
接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。
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(); // 接口回调
}
}
结果:
I’m a student.
I’m a teacher.
2.什么是向上转型[1]?
Shape s=new Circle();
这里,创建了一个Circle对象,并把得到的引用立即赋值给Shape。通过继承,Circle就是一种Shape。
假设你调用基类方法(它已在导出类中被覆盖):
s.draw();
由于后期绑定(多态),将会正确调用Circle.draw()方法。
(向下转型)
class B extends A{}
public class A {
public static void main(String[] argts){
A a1=new A();
A a2=new B();//Upcasting
B b1=new B();
B b2=(B) new A();//DownCasting
}
}