版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
6 篇文章0 订阅
订阅专栏
什么是接口
a.可以认为是一个特殊的抽象类
b.当抽象类中的方法都是抽象的那么该类可以通过接口的形式实现
c.一个类可以实现多个接口
d.当子类对接口中的方法全部实现覆盖后子类才可以实例化,否则子类是一个抽象类
e.不可以实现多继承是因为父类的方法有重复,而接口中的方法都是抽象方法
f.接口亦可以实现多继承
接口的特点
基本功能在类中,扩展功能在接口中。

1.多态的表现

父类的引用可以接受自己子类的对象
Animala=new Cat(); //类型提升 Cat c = (Cat)a; //转成子类型

2.多态的前提

必须是类和类之间的关系(存在覆盖)
a.继承
b.实现

3.多态到底有什么好处(大大提高了程序的扩展性 )

4.多态的应用

/*应用一 电脑运行实例 电脑运行依靠主板 */interfacePCI {publicvoid open();publicvoid close(); } classNetCardimplementsPCI {publicvoid open() { System.out.println("NetCard open"); }publicvoid close() { System.out.println("NetCard close"); } } classSoundCardimplementsPCI {publicvoid open() { System.out.println("SoundCard open"); }publicvoid close() { System.out.println("SoundCard close"); } } classMainBoard {publicvoid run() { System.out.println("MainBoard run"); }publicvoid usePCI(PCI p)//PcI p =new NetCard();接口型对象指向自己的子类对象 { p.open(); p.close(); } } publicclassDuoTaiDemo5 {publicstaticvoid main(String[] args) { MainBoard mb =new MainBoard(); mb.run(); mb.usePCI(new NetCard());//将NetCard对象当作PCI类型来用 mb.usePCI(new SoundCard());//SoundCard对象当作PCI类型来用 }/*应用二 模拟物流快递系程序设计 1.任务描述 网购成为人们生活的一部分,当人们在购物网站中下订单后,订单中的货物就会在一系列的流程后送到客户手中。 2.实现思路 1)定义一个抽象的交通工具类,类中包含交通工具的编号,型号以及运货负责人等属性,还要定义一个抽象的运输方法。 2)运输完成后需要对工具进行保养。所以定义保养接口 3)定义一个专用运输车类,继承交通工具类 4)定义一个快递任务类,包含快递单号,货物重量以及发货前和发货后的方法。 5)定义一个GPS接口,以及实现该接口的仪器类(如iPhone等) */abstract class Transportation {private String number;//编号private String model;//型号private String admin;//送货员publicTransportation (){ super();//可省略 }//构造方法publicTransportation(String number, String model, String admin){this.number=number;//在构造方法中使用this.number表示访问成员变量,this.model=model;//直接使用number表示访问局部变量this.admin=admin; }//运输方法。publicabstractvoidtransport();//编号publicvoidsetNumber(String number){this.number=number; }public StringgetNumber(){return number; }//型号publicvoidsetModel(){this.model=model; }public StringgetModel(){return model; }//送货员publicvoidsetAdmin(){this.admin=admin; }public StringgetAdmin(){return admin; } }//定义交通工具保养接口Careableinterface Careable {publicabstractvoidupKeep(); }//定义专用运输车类 class ZTransportation extends Transportation implements Careable {//无参构造publicZTransportation (){ super(); }//有参构造:车辆编号,型号,负责人publicZTransportation(String number, String model, String admin){ super(number,model,admin); }//运输方法publicvoidtransport(){ System.out.println("货物正在运输中"); }publicvoidupKeep(){ System.out.println("货物运送车辆保养完毕"); } }//定义快递任务类SendTask class SendTask {private String number;//快递单号privatedouble goodsWeight;publicSendTask(){ super(); }publicSendTask(String number,double goodsWeight){this.number=number;this.goodsWeight=goodsWeight; }//送前准备publicvoidSendBefore(){ System.out.println("订单开始处理,仓库验货中"); System.out.println("货物重量:"+this.getGoodsWeight()+"kg"); System.out.println("货物检验完毕"); System.out.println("货物装填完毕"); System.out.println("运货人已通知"); System.out.println("快递单号:"+this.getNumber()); }//发送货物publicvoidsend( Transportation t, GPS tool){ System.out.println("运货人:"+t.getAdmin()+"正在驾驶编号是:"+ t.getNumber()+"的"+t.getModel()+"发送货物"); t.transport(); String showCoordinate=tool.showCoordinate(); System.out.println("货物的当前坐标为:"+showCoordinate); }//送后操作publicvoidsendAfter(Transportation t){ System.out.println("货物运输任务已完成"); System.out.println("运货人:"+t.getAdmin()+"所驾驶的编号是:"+ t.getNumber()+"的"+t.getModel()+"已签收"); }public StringgetNumber(){return number; }publicvoidsetNumber(){this.number=number; }publicdoublegetGoodsWeight(){return goodsWeight; }publicvoidsetGoodsWeight(){this.goodsWeight=goodsWeight; } }//定义接口GPS并且用类iPhone类实现interface GPS {//the way to show the coordinatepublic StringshowCoordinate(); }//实现类iPhone class iPhone implements GPS {publiciPhone(){ super();//空构造参数 }public StringshowCoordinate(){ String location ="193,24";return location; } }//定义测试类publicclass TransportationTest {publicstaticvoidmain(String[] args) {//快递任务类对象 SendTask task=new SendTask("HYX600235",76.34);//发送前状态 task.SendBefore(); System.out.println("----------------------"); System.out.println("----------------------");//创建交通工具类对象 ZTransportation t =new ZTransportation("Z205","Benz","小罗");//创建GPS对象 iPhone i=new iPhone();//发送货物时的状态 task.send(t,i);//发送后方法调用 System.out.println("----------------------"); System.out.println("----------------------"); task.sendAfter(t); t.upKeep(); } }

5.多态的弊端

提高了扩展性,但只能引用父类的引用访问父类中的成员。
if (a instanceof Cat) {}
if (a instanceof Dog) {}