您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > JAVA接口继承和多态
本章要求:第8章接口、继承和多态掌握接口的使用掌握类的继承掌握使用super关键字了解什么是多态主要内容1、接口的使用2、类的继承3、多态4、Object类5、对象类型的转换6、instanceof判断对象类型第8章接口、继承和多态8.2.1继承的实现8.2.2继承中的重写8.2.3使用super关键字8.2类的继承动物食草动物食肉动物动物食草动物生活中的继承生活中,继承的例子随处可见谁是父类?谁是子类?能说出继承的特点吗?食肉动物继承需要符合的关系:is-a,父类更通用、子类更具体37汽车38生活中的继承子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性巴士是汽车吗?卡车是汽车吗?出租车是汽车吗?最大载客数量报站汽车最大载重量卸货引擎数量外观颜色刹车加速所属公司最大载客数量打发票属性行为为什么要有继承?Person--nameage:String:int++++getName()setName(Stringname)getAge()setAge(intage):String:void:int:voidStudent---nameageschool:String:int:String++++++getName()setName(Stringname)getAge()setAge(intage)getSchool()setSchool(Stringschool):String:void:int:void:String:void使用继承,可以有效实现代码复用,可以扩展原有的代码,应用到其他程序中,而不必重新编写这些代码。继承是通过扩展原有的类,声明新类来实现。子类:扩展声明的新类;父类:原有的类通过以下例子分析为什么要有继承?以下有两个类person类和Student类,Person类具备属性(name,age);Student类具备属性(name,age,school);具体见代码;分析:这两个类具有相同的属性和相同的方法,且Person和Student也属于有关系的类,因为学生本身就是一个人,人所具有的属性学生肯定也具备。因此为保持代码的简洁易读性,可以使用继承将Person类中的内容继续保留到Student类中。Person--nameage:String:int++++getName()setName(Stringname)getAge()setAge(intage):String:void:int:voidStudent---nameageschool:String:int:String++++++getName()setName(Stringname)getAge()setAge(intage)getSchool()setSchool(Stringschool):String:void:int:void:String:void8.2.1继承的实现在Java中使用extends关键字完成类的继承关系,操作格式:class父类{//定义父类}class子类extends父类{//使用extends关键字实现继承}如果缺省extends子句,则该类的超类时系统声明的类java.lang.Object子类继承父类中不是private的成员变量作为自己的成员变量,并且自然地继承父类中不是private的方法作为自己的方法1.继承的实现classPerson{//定义Person类privateStringname;//定义name属性privateintage;//定义age属性publicvoidsetName(Stringname){this.name=name;}publicvoidsetAge(intage){this.age=age;}publicStringgetName(){returnthis.name;}publicintgetAge(){returnthis.age;}};classStudentextendsPerson{//定义Student类//此处不添加任何的代码};publicclassExtDemo02{publicstaticvoidmain(Stringarsg[]){Studentstu=newStudent();//实例化子类对象stu.setName(张三);//此方法在Student类中没有明确定义stu.setAge(30);System.out.println(姓名:+stu.getName()+,年龄:+stu.getAge());}};2.通过子类扩展父类的功能classPerson{//定义Person类privateStringname;//定义name属性privateintage;//定义age属性publicStringgetName(){//取得name属性returnname;}publicvoidsetName(Stringname){//设置name属性this.name=name;}publicintgetAge(){//取得age属性returnage;}publicvoidsetAge(intage){//设置age属性this.age=age;}}classStudentextendsPerson{//Student是Person的子类privateStringschool;//新定义的属性schoolpublicStringgetSchool(){//取得school属性returnschool;}publicvoidsetSchool(Stringschool){//设置school属性this.school=school;}}Person与Student的继承关系图重写是指父子类之间的关系,当子类继承父类中所有可能被子类访问的成员方法时,如果子类的方法名与父类的方法名相同,那么子类就不能继承父类的方法,此时,称为子类的方法重写了父类的方法。重写体现了子类补充或者改变父类方法的能力。通过重写,可以使一个方法在不同的子类中表现出不同的行为。3.继承中的重写【例8-2-2】在项目中创建Bike类和Bird类,分别重写其toString()方法。publicclassBike{@OverridepublicStringtoString(){//重写toString()方法returnBike;}}publicclassBird{@OverridepublicStringtoString(){//重写toString()方法returnBird;}}publicclassTest{publicstaticvoidmain(String[]args){Objectbike=newBike();//创建Bike类对象System.out.println(bike);//输出Bike类对象Objectbird=newBird();//创建Bird类对象System.out.println(bird);//输出Bird类对象}}继承的限制在Java中只允许单继承,不能使用多重继承,即:一个子类只能继承一个父类。但是允许进行多层继承,即:一个子类可以有一个父类,一个父类还可以有一个父类。多重继承多层继承访问限制在使用继承的时候也应注意的是:子类是不能直接访问父类中的私有成员的,但是子类可以调用父类中的非私有方法,但是不能直接调用父类中的私有成员。课堂案例定义员工类,具有姓名,年龄,性别属性,并具有构造方法和显示数据方法,定义管理层类,继承员工类,并有自己的属性职务和年薪。8.1.1接口的定义8.1.2接口的实现8.1接口的使用接口接口是java中最重要的概念,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。在实际应用中主要用来制定标准。比如说:“U盘和打印机都可以插在电脑上使用,这是因为它们都实现了USB的接口,对于电脑来说,只要是符合了USB接口标准的设备就都可以插进来8.1.1接口的定义interface接口名称{全局常量;抽象方法;}接口的定义完整格式:interfaceA{publicstaticfinalStringAUTHOR=“张三;//定义全局常量publicabstractvoidprint();//定义抽象方法publicabstractStringgetInfo();//定义抽象方法}简化格式interfaceA{StringAUTHOR=“张三”;//等价于:publicstaticfinalStringAUTHOR=“张三;voidprint();//等价于:publicabstractvoidprint();StringgetInfo();//等价于:publicabstractStringgetInfo();}8.1.2接口的实现接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用关键字implements,基本语法格式如下所示:[修饰符]class类名[extends父类名][implements接口列表]{}实现接口的语法格式的参数说明如表8-2所示:表8-2实现接口的语法格式的参数说明在类中实现接口时,方法名、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。接口的实现实现格式:class子类implements接口A,接口B,...{}实现接口interfaceA{//定义接口ApublicStringAUTHOR=李兴华;//定义全局常量publicvoidprint();//定义抽象方法publicStringgetInfo();//定义抽象方法}interfaceB{//定义接口Bpublicvoidsay();//定义抽象方法}classXimplementsA,B{//子类同时实现两个接口publicvoidsay(){//覆写B接口中的抽象方法System.out.println(HelloWorld!!!);}publicStringgetInfo(){//覆写A接口中的抽象方法returnHELLO;}publicvoidprint(){//覆写A接口中的抽象方法System.out.println(作者:+AUTHOR);}}接口的实现以上的程序中,一个子类同时实现了两个接口,这样在子类中就必须同时覆写完两个接口中的全部抽象方法X+++ImplementImplementImplementsay()getInfo()print():void:String:voidA+AUTHOR:String=李兴华++print()getInfo():void:StringB+say():void接口的实际应用------制定标准(案例制定USB标准)interfaceUSB{//定义USB接口publicvoidstart();//USB设备开始工作publicvoidstop();//USB设备结束工作}classComputer{publicstaticvoidplugin(USBusb){//只要是USB的设备就都可以向此地方插入usb.start();//让USB设备开始工作System.out.println(=======USB设备工作=======);usb.stop();//让USB设备停止工作}};classFlashimplementsUSB{//U盘publicvoidstart(){//覆写start()方法System.out.println(U盘开始工作。);}publicvoidstop(){//覆写stop()方法System.out.println(U盘停止工作。);}};classPrintimplementsUSB{//打印机publicvoidstart(){//覆写start()方法System.out.println(打印机开始工作。);}publicvoidstop(
本文标题:JAVA接口继承和多态
链接地址:https://www.777doc.com/doc-2881070 .html