收藏 分销(赏)

多态性-接口-抽象类.ppt

上传人:仙人****88 文档编号:10786302 上传时间:2025-06-14 格式:PPT 页数:27 大小:1.32MB 下载积分:10 金币
下载 相关 举报
多态性-接口-抽象类.ppt_第1页
第1页 / 共27页
多态性-接口-抽象类.ppt_第2页
第2页 / 共27页


点击查看更多>>
资源描述
,*,单击此处编辑标题,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑标题,*,标题,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,oop多态,abstract,修饰符,由,abstract,修饰的方法叫抽象方法;由,abstract,修饰的类叫抽象类,抽象方法必须声明在抽象类中(含有抽象方法的类,必须定义为抽象类),抽象方法语法:,public,abstract,void,fun(),声明抽象类语法:,abstract,class,使用:父类中的某些抽象不包含任何逻辑,并需要在子类中重写,子类提供这种抽象方法的实现细节,abstract,修饰符练习:,首先定义一个类Person,属性:name,age 方法:eat(),.在Person里面再定义一个抽象的方法say(),查看结果,结果:程序报错,,含有抽象方法的类,必须定义为抽象类。,.尝试声明一个对象,然后new一个Person类的实例,查看结果。,结果:程序报错,,抽象类,可以声明,但不能实例化。,写一Student类,继承Person类。查看结果。,结果:,子类必须重写父类(抽象类)里面的抽象方法。,增加方法体,使之成为一个非抽象方法。可以空实现。,如果子类没有实现抽象基类(,父类,)中所有的抽象方法,则子类也必须定义成一个抽象类。,考虑,含有抽象方法的类,必须定义为抽象类,,,如果一个类中没有抽象方法,那可以定义为抽象类吗,?,使用程序验证。,答案:,可以将,没有任何抽象方法的类声明为abstract,。,大家想下,这样做有什么作用呢?,避免由这个类直接创建任何的对象,。,abstract,修饰符,抽象类可以具有指向子类对象的对象引用,abstract,抽象类不能被,实例化,构造方法,和,static,方法不能是抽象的,父类的抽象方法往往在子类中实现,abstract,修饰符,抽象类可以被,final,修饰吗?,抽象类可以有构造方法吗?,有没使用,abstract,修饰的构造方法?,抽象类练习,用抽象类实现多态,假设人类分两种学生和工人,student:,属性:姓名、年龄、成绩(score),,方法,say(),worker:,属性:姓名、年龄、工资(salary),,方法,say(),PS:Student和worker的say(),说话的内容不一样,小结,用,abstract,关键字来修饰一个类时,这个类叫抽象类;用,abstract,来修饰一个方法时,该方法叫做抽象方法。,abstract,类必须被继承,,abstract,方法必须被重写。,抽象类不能被实例化(直接创建对象)。,抽象方法只需声明,而不需实现(无方法体)。,作业,作业:按以下要求编写程序,创建一个抽象的车类,包括各种车辆,。至少包含一个抽象方法。成员变量:品牌、可载人数、轮子个数、能源等。抽象方法如:跑、加速、刹车等。,通过继承车类重新声明公共汽车类和普通自行车类。,在子类中实现父类中抽象方法,构造方法对应区分为公共汽车和普通自行车,。子类的构造方法中根据不同的类设置不同的默认值,如汽车类可以默认轮子个数是,4,个,可载人数,50,个,能源为汽油。,生活中的接口,电脑主板上的,PCI,插槽的规范就类似于,Java,接口,声卡,电视卡,网卡,每种卡的内部结构都不相同,可以把声卡、网卡、显卡都插在,PCI,插槽上,而不用担心哪个插槽是专门插哪个卡的,主板,接口,如果一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。,接口是,抽象方法,和,常量值,的定义的集合。,从本质上讲,接口是一种特殊的抽象类。这种抽象类中包含常量和方法的定义,而没有变量和方法的实现。例如,public,interface,Runner,int,ID=1;,void run();,注意:在接口,中,,所有的成员都是,public,访问类型的,而不论是否用,public,关键字修饰;接口里的变量都是用,public static final,标识的,所以,接口中定义的变量就是全局静态常量。,接口中的方法默认都是,public,abstract,类型的,。,JAVA,接口,一个,JAVA,接口是一些方法特征的集合,但是没有方法的实现。,JAVA,中定义的方法在不同的地方被实现,可以具有完全不同的实现。,public,interface,PCI,public void,start();,public void,stop();,这是,Java,接口,相当于主板上的,PCI,插槽的规范,class,SoundCard,implements,PCI,public void,start()System.,out,.println(,Du du.,);,public void,stop()System.,out,.println(,Sound stop!,);,class,NetworkCard,implements,PCI,public void,start()System.,out,.println(,Send.,);,public void,stop()System.,out,.println(,Network stop!,);,声卡、网卡都实现了,PCI,插槽的规范,但行为完全不同,接口特点,写一个接口,验证以下特点:,1.,接口中的成员变量默认都是,public static fina,l,类型的。,2.,接口中的方法默认都是,public abstract,类型的。,3.,接口没有构造方法,不允许创建接口的实例。,4.,接口必须通过其他类来实现它的抽象方法。,5.,一个类可以实现多个接口。,接口的使用,一个类只能用,implements,关键字去实现一个接口中的所有方法,class Fish,implements,Animal,public void run(),System.out.println(“fish,can swim!”);,public void breathe(),System.out.println(“fish,can breathe!”);,我们可以定义一个新的接口,用,extends,关键字去继承一个已有的接口。,注意,:,只能接口继承接口,类不能继承接口,。,写一程序验证,一个类可以在继承一个父类的同时,实现一个或多个接口,,extends,关键字必须位于,implements,关键字,之前,,如我们可以这样定义:,interface Flyer,void fly();,class Bird extends animal implements Runner,Flyer,public void run(),public void fly(),接口的使用,面向接口编程的示例,4-1,升级上述的,Wepull,系统,要求:,打印机有多种类型,比如:黑白打印机、彩色打印机等,区域可能配备其中任意一款打印机,负责信息,系统要具备良好的可扩展性与可维护性,print,方法,(打印),彩色打印机,黑白打印机,黑白内容,区域,/,讲师,详细信息,彩色内容,面向接口编程的示例,4-2,采用面向接口编程的方式实现,以下是三个步骤中的第一步:,抽象出,Java,接口,1,、分析:,黑白、彩色打印机都存在一个共同的方法特征:,print,黑白、彩色打印机对,print,方法有各自不同的实现,2,、结论:,抽象出,Java,接口,Printer,,在其中定义方法,print,3,、具体实现:,public,interface,Printer,public void,print,(String,content);,面向接口编程的示例,4-3,采用面向接口编程的方式实现,以下是三个步骤中的第二步:,public class,ColorPrinter,implements,PrinterFace,public void,print,(String,content),System.out.println,(,彩色打印:,);,System.out.println(content,);,public class,BlackPrinter,implements,PrinterFace,public void,print,(String,content),System.out.println,(,黑白打印:,);,System.out.println(content,);,实现,Java,接口,1,、,分析:,已经抽象出,Java,接口,PrinterFace,,并在其中定义了,print,方法,黑白、彩色打印机对,print,方法有各自不同的实现,2,、结论:,黑白、彩色打印机都实现,PrinterFace,接口,各自实现,print,方法,3,、具体实现:,面向接口编程的示例,4-4,采用面向接口编程的方式实现,以下是三个步骤中的第三步:,使用,Java,接口,1,、,分析:,主体构架使用接口,让接口构成系统的骨架,2,、结论:,更换实现接口的类就可以更换系统的实现,3,、具体实现:,public class WepullArea3 implements,Introduceable,private,PrinterFace,printer;/,打印机,public void,setPrinter(PrinterFace,p),this.printer,=p;,public String detail(),return,这里是,Wepull,区域,;,public void,print(Introduceable,intro),printer.print(intro.detail,();,public class,WepullTest,public static void,main(String,args,),/,创建区域实例,WepullArea3 area=new WepullArea3();,/,为该区域配备黑白打印机,area.setPrinter(,new,BlackPrinter,(),);,area.print(area,);,/,为该区域配备彩色打印机,area.setPrinter(,new,ColorPrinter,(),);,area.print(area,);,多态机制,(,polymorphisn,),多态机制是面向对象程序设计的一个重要特征。,多态的特点是,采用同名的方式,根据调用方法时传送的参数的多少以及传送参数类型的不同,调用不同的方法,,这样对于类的编制而言,可以采用同样的方法获得不同的行为特征。,多态性,编译时多态,表现为,方法名相同,而参数列表不同,。典型:,System.out.println,();,它的参数有很多种。,运行时多态,程序运行的时候判断到底是哪个类(父类还是子类的),进而确定实际调用的方法,3,对象的多态性,(子类对象和父类对象的相互转化关系),向上转型 父类 父类对象,=new,子类的实例,自动完成,向下转型 子类 子类对象,=,new,父类的实例,强制完成,。,重载,覆盖,多态(,polymorphisn,),简单来说,:,多态是能用一种类型去表现多种形态的特征,下面写一个类,Dog,,继承于类,Animal,,要求使用对象多态性。,多态,练习(按要求设计出以下类):,fruit,类:具有一个自我介绍方法,fun(),apple,类:继承,fruit,类,覆盖父类的,fun(),方法,有一个的方法,funA,(),orange,类,:,继承,fruit,类,覆盖父类的,fun(),方法,同时有一 个自己的方法,funO,(),person,类:设计一个方法,eat(),,要求可以接受,fruit,类所 有实例,并在,eat(),中调用实例自己自我介绍,fun(),方法。,多态,修改,eat,方法,可以在,eat(),方法中调用,Apple,类或,Orange,类中自有的方法。,I,nstanceof,关键字,I,nstanceof,操作符用于判断一个引用类型所引用的对象是否是一个类的实例。,使用示例:,obj,instranceof,ClassName,(,类名,),obj,instranceof,InterfaceName,(,接口名,),返回一个,boolean,型的数据,一个类的实例包括:,类本身的实例,直接子类的实例,间接子类的实例,如何实现多态,子类继承父类,子类重写父类的方法,编写方法时,使用父类作为形参类型,将子类的对象作为实参传递给该方法,运行时,根据实际创建的对象类型动态决定使用哪个子类的方法,实现多态的三个条件:,1.,要有继承,2.,要有重写,3.,父类的对象指向子类的实例,多态综合练习,动物园的饲养员为猫吃鱼,狗吃肉,大象吃香蕉。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服