转载请注明出处。
原文链接:https://blog.csdn.net/qq_39309348/article/details/88061031
先讲一下接口回调。
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.
例子参考:https://zhidao.baidu.com/question/1923748969384870227.html
接口是为了实现多态。
接口是为了实现多态。
接口是为了实现多态。
然后就会有人疑惑,多态和不多态有什么区别么
接口 对象名1 = new 类名;
类名 对象名2 = new 类名;
在使用的时候,好像区别都不大。实例化对象调用方法,你就会发现使用接口 对象名 = new 类名; 方式实例化的对象只能调用接口中有的方法,而不能调用类中特有的方法。而使用类名 对象名 = new 类名;方式创建出来的对象可以调用所有的方法
但要是我不止一个实现类呢?如果A有实现类 B C D E。
用类名 对象名2 = new 类名;来写的话,我们要写5次,创建5个对象,如果用接口回调,我们只需要:
A a = new B(); a.方法名();
a=new C(); a.方法名()........来实现多态。
使用接口编程的好处是统一规范化。你会发现无论多少个实现类,无论这些实现类有什么不同,使用接口 对象名 = new 类名; 方式实例化对象都可以调用接口中定义的方法。
但是
接口回调的最大作用并不仅仅是为了统一规范化。这里举个例子:
public class work {
public static void main(String[] args) {
Phone a = new ClassA(); //Phone是父类,ClassA是实现类
CallUp(a);
a = new ClassB();
CallUp(a);
}
public static void CallUp(Phone phone) {
System.out.println(phone.call(phone.num));//num是父类的一个属性
};
}
上面这里,Phone是一个手机接口,它可以代表所有的手机。
而ClassA和ClassB代表不同的手机型号,当然还有很多诸如iphone啊华为啊,小米啊之类的接口实现类。
现在我有一个打电话的功能叫做CallUp(),如果我们使用(实现类 a =new 实现类())的写法,那每个手机型号,我都需要写一个CallUp的方法来接收我的手机,每个手机的打电话方式(方法)都得不到统一。
如果我们使用接口回调,那我不管你是什么手机,反正只要能实现打电话的就行,所有的手机类型都可以放在Phone phone里面,我就不需要写很多次方法,毕竟手机型号这么多,难道我还得每一个手机型号都为他写一个方法?
由此可见,接口回调(接口 a = new 接口),不仅仅是为了规范,他最致命的优点是可以统一化管理所有子类,只需要提供一个共有的方法。
喜欢点个赞呗