(实现类 对象名 = new 类名)和(接口  对象名 = new 类名) 的区别,论接口多态的实现

转载请注明出处。

原文链接: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 接口),不仅仅是为了规范,他最致命的优点是可以统一化管理所有子类,只需要提供一个共有的方法。


喜欢点个赞呗

  • 49
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值