java第5章继承与多态.ppt

上传人:max****ui 文档编号:11496847 上传时间:2020-04-25 格式:PPT 页数:54 大小:1.22MB
返回 下载 相关 举报
java第5章继承与多态.ppt_第1页
第1页 / 共54页
java第5章继承与多态.ppt_第2页
第2页 / 共54页
java第5章继承与多态.ppt_第3页
第3页 / 共54页
点击查看更多>>
资源描述
第五章,第五章继承与多态,本节要点和目标,本节要点和目标.,一、继承二、多态三、包四、接口,一、继承,一,继承,(一)继承的含义,(一)继承的含义,继承实际上是存在于面向对象程序中的两个类之间的一种关系。当一个类获取另一个类中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。,(二)类的继承,(二)类的继承,extends用来说明类的父类,也即当前类(子类)继承父类的属性和方法。java语言中,如果在类说明中无extends,则隐含地假设其父类为java.lang.object类。,extends,/appl5_1派生子类classCCircle/定义类CCircleprivatedoublepi=3.14;privatedoubleradius;publicCCircle()/CCircle()构造方法System.out.println(CCircle()constructorcalled);publicvoidsetRadius(doubler)radius=r;System.out.println(radius=+radius);publicvoidshow()System.out.println(area=+pi*radius*radius);,classCCoinextendsCCircle/定义CCoin类,继承自CCircle类privateintvalue;publicCCoin()/CCoin()构造方法System.out.println(CCoin()constructorcalled);publicvoidsetValue(intt)value=t;System.out.println(value=+value);,publicclassappl5_1publicstaticvoidmain(Stringargs)CCoincoin=newCCoin();/建立CCoin对象coin.setRadius(2.0);/调用父类的setRadius()methodcoin.show();/调用父类的show()methodcoin.setValue(5);/调用子类的setValue()method,(三)构造方法的继承,(三)构造方法的继承,子类可以继承父类的构造方法,构造方法的继承遵循以下的原则:(1)子类无条件继承父类的不含参数的构造方法。(2)如果子类自己没有构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。(3)父类的含参数构造方法,子类可以通过在自己构造方法中使用super关键字来调用,但这个调用语句必须是子类构造方法的第一个可执行语句。,/appl5_2构造方法的继承classsuperclass/父类intx=8;/*superclass(inty)/父类构造方法System.out.println(y);*/publicclassappl5_2extendssuperclass/子类appl5_2()/子类构造方法/super(5);System.out.println(super.x);publicstaticvoidmain(Stringargs)appl5_2a=newappl5_2();/建立appl5_2对象,(四)this和super,(四)this和super,this和super是常用来指代父类对象和子类对象的关键字。this表示的是当前对象本身,this代表了当前对象的一个引用,它仅仅是对象的另一个名字。利用this可以调用当前对象的方法或使用当前对象的域。super表示的是当前对象的直接父类对象,是当前对象的直接父类对象的引用。,/appl5_3this和super的使用(1)classsuperclass/父类intx=8;publicclassappl5_3extendssuperclass/子类inty=9;appl5_3()/子类构造方法System.out.println(this.y);System.out.println(super.x);publicstaticvoidmain(Stringargs)appl5_3a=newappl5_3();/建立appl5_3对象,二、多态,二,多态,(一)多态的含义,(一)多态的含义,所谓多态,是指一个程序中同名的不同方法共存的情况。面向对象的程序中多态的情况有多种,可以通过子类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不同方法。,(二)覆盖与隐藏,(二)覆盖与隐藏,子类对继承自父类的方法的重新定义,就称为方法的覆盖(overload)。,子类重新定义一个与从父类那里继承来的域变量完全相同的变量,称为域的隐藏。,穿衣,肤色,/appl5_4,方法的覆盖,域的隐藏classCCircle/父类CCircleprotecteddoubleradius;protectedstaticdoublepi=3.14;publicCCircle(doubler)radius=r;publicvoidshow()/父类里的show()methodSystem.out.println(radius=+radius);,classCCoinextendsCCircle/子类CCoinprivateintvalue;publicCCoin(doubler,intv)super(r);value=v;publicvoidshow()/子类里的show()methodSystem.out.println(radius=+radius+,value=+value);,publicclassappl5_4publicstaticvoidmain(Stringargs)CCoincoin=newCCoin(2.0,5);coin.show();,(三)重载,(三)重载,方法的重载是指类对自身已有的同名方法的重新定义。多个方法可以享有相同的名字,但是,这些方法的参数必须不同,它们或是参数的数量不同,或是参数的类型不同。,找零,制冷,制热,除湿,/appl5_5,方法的重载(1)classCCircle/定义类CCircleprivateStringcolor;privatedoublepi=3.14;privatedoubleradius;publicvoidsetColor(Stringstr)/设置color的方法color=str;publicvoidsetRadius(doubler)/设置radius的方法radius=r;publicvoidsetAll(Stringstr,doubler)color=str;/同时设置color与radiusradius=r;publicvoidshow()/打印半径、颜色与圆面积System.out.println(color=+color+,Radius=+radius);System.out.println(area=+pi*radius*radius);,publicclassappl5_5publicstaticvoidmain(Stringargs)CCirclecir1=newCCircle();cir1.setColor(Red);/设置cir1的colorcir1.setRadius(2.0);/设置cir1的radiuscir1.show();cir1.setAll(Blue,4.0);/同时设置cir1的color和radiuscir1.show();,/appl5_5,方法的重载(2)classCCircle/定义类CCircleprivateStringcolor;privatedoublepi=3.14;privatedoubleradius;publicvoidsetCircle(Stringstr)/设置color成员color=str;publicvoidsetCircle(doubler)/设置radius成员radius=r;publicvoidsetCircle(Stringstr,doubler)color=str;/同时设置color与radiusradius=r;publicvoidshow()System.out.println(color=+color+,Radius=+radius);System.out.println(area=+pi*radius*radius);,publicclassappl5_5publicstaticvoidmain(Stringargs)CCirclecir1=newCCircle();cir1.setCircle(“Red”);/调用第一个setCircle()方法cir1.setCircle(2.0);/调用第二个setCircle()方法cir1.show();cir1.setCircle(“Blue”,4.0);/调用第三个setCircle()方法cir1.show();,publicvoidsetCircle(Stringstr)color=str;publicvoidsetCircle(doubler)radius=r;publicvoidsetCircle(Stringstr,doubler)color=str;radius=r;,publicclassappl5_5publicstaticvoidmain(Stringargs)cir1.setCircle(“Red”);cir1.setCircle(2.0);cir1.setCircle(“Blue”,4.0);,(四)构造方法的重载,(四)构造方法的重载,构造方法的重载是指同一个类中存在着若干个具有不同参数列表的构造方法。,三、包,三,包,(一)文件的分割,(一)文件的分割,/appl5_6文件分割classCCirclepublicvoidshow()System.out.println(“ThisisaCCircleclass”);publicclassappl5_6publicstaticvoidmain(Stringargs)CCirclecir=newCCircle();cir.show();,/CCircle.java,假设本文件置于e:javapack1classCCirclepublicvoidshow()System.out.println(“ThisisaCCircleclass”);,/appl5_6.java,假设本文件置于e:javapack1publicclassappl5_6publicstaticvoidmain(Stringargs)CCirclecir=newCCircle();cir.show();,e:javapack1e:javapack1javacCcircle.javae:javapack1javacappl5_6.java(e:javajavacpack1app5_6.java)e:javapack1javaappl5_6ThisisaCCircleclass,包是一个相关的类和接口的集合,它可以提供访问保护和名称空间管理。包的概念类似于windows操作系统中的文件夹(目录)。包是类的集合,引入包的机制是为了避免类名的冲突,同时使得各个类的层次结构分明。java语言中的类和接口是各种包的成员,每个集合是一个包,合称为“类库”。,(二)创建包,(二)创建包,package包的名称;,package语句的要求:对于将要包含到包中的类,要求它的代码必须和包中其它文件在同一个目录中。package语句必须是文件中的第一个语句。在package语句之前除了空白和注释以外不能有任何东西。,/appl5_7,package的使用文件置于在e:javapack2文件夹内packagepack2;classCCircle/CCircle类已被纳入packagepack2当中publicvoidshow()System.out.println(show()methodcalled);publicclassappl5_7/将appl5_7类也纳入packagepack2当中publicstaticvoidmain(Stringargs)CCirclecir=newCCircle();cir.show();,(三)包的引用,(三)包的引用,使用包名.类名前缀,/CCircle.java此文件存放在pack3b文件夹内packagepack3b;publicclassCCirclepublicvoidshow()System.out.println(“*);,/appl5_8.java此文件存放在pack3a文件夹内packagepack3a;publicclassappl5_8publicstaticvoidmain(Stringargs)pack3b.CCirclecir=newpack3b.CCircle();cir.show();,import包名.类名;,/CCircle.java此文件存放在pack3b文件夹内packagepack3b;publicclassCCirclepublicvoidshow()System.out.println(“*);,/appl5_8.java此文件存放在pack3a文件夹内packagepack3a;importpack3b.CCircle;publicclassappl5_8publicstaticvoidmain(Stringargs)CCirclecir=newCCircle();cir.show();,import包名.*;,/CCircle.java此文件存放在pack3b文件夹内packagepack3b;publicclassCCirclepublicvoidshow()System.out.println(“*);,/appl5_8.java此文件存放在pack3a文件夹内packagepack3a;importpack3b.*;publicclassappl5_8publicstaticvoidmain(Stringargs)CCirclecir=newCCircle();cir.show();,四、接口,接口,四,(一)接口概述,(一)接口概述,接口是一个有名称的方法定义的集合,是用来实现类间“多重继承”功能的结构。接口中只有常量和抽象方法。接口与抽象类的区别是:(1)接口的数据成员必须初始化;(2)接口里的method必须全部都声明成abstract;(3)类可以实现许多接口,但只能有一个超类。,(二)声明接口,(二)声明接口,publicinterface接口名extends父接口名列表/域成员;./抽象方法成员;.,接口的成员变量必须是public、static和final,这是java系统默认的规定,所以接口的成员变量也可以没有任何修饰符,其作用是完全一样的。接口的抽象方法必须是public和abstract,这也是java系统默认的规定,所以接口的抽象方法也可以没有任何修饰符,其作用是完全一样的。,interfaceiShape2D/定义接口finaldoublepi=3.14;/数据成员一定要初始化abstractvoidarea();/抽象方法,(三)实现接口,(三)实现接口,类修饰符classextendsimplements数据类型成员变量名称;.返回值的数据类型方法名称(参数1,参数2,.)程序语句;return表达式;.,/appl5_9接口的实现classCRectangleimplementsiShape2D/实现CRectangle类intwidth,height;publicCRectangle(intw,inth)width=w;height=h;publicvoidarea()/定义area()的处理方式System.out.println(area=+width*height);classCCircleimplementsiShape2D/实现CCircle类doubleradius;publicCCircle(doubler)radius=r;publicvoidarea()/定义area()的处理方式System.out.println(area=+pi*radius*radius);,publicclassappl5_9publicstaticvoidmain(Stringargs)CRectanglerect=newCRectangle(5,10);rect.area();/调用CRectangle类里的area()CCirclecir=newCCircle(2.0);cir.area();/调用CCircl类里的area(),(四)接口实现多重继承,/appl5_10,实现两个以上的接口interfaceiShape2D/定义iShape2D接口finaldoublepi=3.14;abstractvoidarea();interfaceiColor/定义iColor接口abstractvoidsetColor(Stringstr);,classCCircleimplementsiShape2D,iColor/实现iShape2D与iColor接口doubleradius;Stringcolor;publicCCircle(doubler)radius=r;publicvoidsetColor(Stringstr)/定义iColor接口里的setColor()color=str;System.out.println(color=+color);publicvoidarea()/定义iShape2D接口里的area()methodSystem.out.println(area=+pi*radius*radius);,publicclassappl5_10publicstaticvoidmain(Stringargs)CCirclecir;cir=newCCircle(2.0);cir.setColor(Blue);/调用CCircl类里的setColor()methodcir.area();/调用CCircl类里的area()method,作业,作业:P121E1、2、3、4、5、6、8、10、11、14、15、19、20、21,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!