您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第三章面向对象程序设计基础(3)
第三章抽象类、接口与多态2020/1/21一、抽象类(P74)什么是抽象类OOP,所有的对象都是通过类来描绘的,但并不是所有的类都是用来描绘对象的;如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类;例如:形状、乐器等都没有直接对应的具体对象,可以定义为抽象类。2020/1/21抽象类的声明abstractclassShape{...}说明:类前加修饰符abstract可包含常规类能够包含的任何东西,例如构造方法,成员方法等也可包含抽象方法2020/1/21抽象方法abstractreturnTypemethodName(...);例如:abstractvoidprintInfo();//{}说明:仅有方法头,而没有方法体具有抽象方法的类必须声明为抽象类一个抽象类不一定有抽象方法2020/1/21一个绘图的例子各种图形都需要实现绘制方法,可在它们的抽象父类中声明一个draw抽象方法ShapeCircleLineRectangleabstractvoiddraw();只声明,不实现子类分别实现draw()方法,完成绘图功能2020/1/21//抽象父类publicabstractclassShape{publicabstractvoiddraw();}//非抽象子类publicCircleextendsShape{publicvoiddraw(){System.out.println(“DrawCircle.”);}}非抽象的子类必须实现父类所有的抽象方法2020/1/21二、接口(P76)什么是接口Java中的接口是一系列方法的声明,而没有方法的实现;接口常常代表一个角色,它封装与该角色相关的操作,规定了该角色应该具有的功能2020/1/21接口举例防盗门、防盗手机、汽车等都具有防盗报警功能;汽车、飞机、鱼都有可移动的功能,如下所示:AlertDoorMobileCarMovableCarPlaneFish接口实现了接口的类2020/1/21接口的声明声明格式:publicinterfaceinterfaceName{//抽象方法的声明或常量定义}说明:关键字interface指明接口接口中的方法必须是公有的抽象方法,但允许省略public及abstract关键字也可以在接口内定义常量2020/1/21//接口的声明publicinterfaceMovable{//publicabstract省略voidstart();voidspeedUp();voidturnDirection(booleandir);voidstop();}2020/1/21接口的实现利用接口构造类的过程,称为接口的实现使用implements关键字,语法如下publicclass类名称implements接口名称{//方法实现}注意:必须实现接口中的所有抽象方法来自接口的方法必须声明为public2020/1/21//接口的实现publicclassCarimplementsMoveObject{publicvoidstart(){//语句块,实现汽车启动}publicvoidspeedUp(){…}publicvoidturnDirection(booleandir){…}publicvoidstop(){…}}2020/1/21多继承不支持多继承,只能有一个父类但可以有多个父接口publicclassManagerextendsEmplyee{//……}publicclassCarimplementsAlert,Movable{//……}publicclassAlertDoorextendsDoorimplementsAlert{//……}2020/1/21定义手机(MobilePhone)类是一种通讯器材(Comm抽象类)具有音乐功能(Music接口)具有摄像功能(Photo接口)MobilePhone.java-演示Java中的“多继承”,并区分接口和抽象类的使用时机。publicclassMobilePhoneextendsCommimplementsMusic,Photo{//……}2020/1/21三、多态(P71)向上转型(UpCasting)对象既能以本身的类型使用,也可以当作父类或父接口使用。MovableCarPlaneFishUpCastingDownCasting2020/1/21publicclassCastDemo{publicstaticvoidmain(String[]args){Movableobj[]=newMovable[3];obj[0]=newCar();obj[1]=newFish();obj[2]=newPlane();for(inti=0;iobj.length;i++){obj[i].start();}}}2020/1/21什么是多态从相同的基类(父类或父接口)派生出来的多个类型可被当作同一种类型对待,这些派生类对象响应同一方法时的行为是有所差别的;同一方法在行为上的差别就是多态。好处能开发出“可扩充”的程序。2020/1/21publicclassPolyDemo{publicstaticvoidmain(String[]args){Movablem1=newCar();Fishm2=newFish();move(m1);move(m2);}publicstaticvoidmove(Movableobj){obj.start();//编译时功能确定吗?}}2020/1/21四、其它关键字(P71)final可以修饰类、成员变量和成员方法,但作用各不相同;修饰成员变量,则成为常量,定义时同时给出初始值;修饰方法,则该方法不能被子类重写;修饰类,则类不能被继承。2020/1/21static可以修饰成员变量和成员方法,如:publicclassTicket{//类变量或静态变量publicstaticintleftTickets=100;//类方法或静态方法publicstaticintgetLeftTickets(){returnleftTickets;}}2020/1/21静态变量和方法可以通过类名访问publicclassStaticDemo{publicstaticvoidmain(String[]args){inttemp=Ticket.leftTickets;System.out.println(temp);Ticket.leftTickets--;temp=Ticket.getLeftTickets();System.out.println(temp);}}2020/1/21this&superthis可引用当前对象,super代表引用对象的父类对象;通过this可以调用自身的构造方法,通过super可调用父类的构造方法;Employee.java-演示this的使用Manager.java-演示super的使用
本文标题:第三章面向对象程序设计基础(3)
链接地址:https://www.777doc.com/doc-3227389 .html