Java8第六章-继承和多态.ppt_第1页
Java8第六章-继承和多态.ppt_第2页
Java8第六章-继承和多态.ppt_第3页
Java8第六章-继承和多态.ppt_第4页
Java8第六章-继承和多态.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

VIP免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章,继承和多态紫薇真人李万鸿,回顾与作业点评,抽象封装属性和方法this关键字包,本章任务,掌握继承掌握多态掌握访问修饰符掌握staticfinalabstract关键字掌握接口,知识要点,继承多态访问修饰符staticfinalabstract关键字接口,6.1Java中的继承,动物,食草动物,食肉动物,兔子,狮子,继承具有层次结构,并具有传递性子类继承了父类的属性和方法,父类,子类,6.1Java中的继承,继承具有以下优点:1.代码的可重用性2.使用继承可以自定义子类3.父类的属性和方法可用于子类4.设计应用程序变得更加简单,6.1Java中的继承,前面已经讲完了抽象与封装,下面让我们进入面向对象的第二大基本特征继承的学习。继承是指一个子类通过extends关键字,包含了它父类的属性和方法。继承的格式:修饰符classAextendsB类体代码其中A是子类,B是父类。,Java中类的继承,在java中,不支持多继承,也就是说,一个子类,只能继承一个父类。,父类,子类,父类1,父类2,子类,不过,可以利用接口,间接的实现多继承,classEmployeeprivateStringname;/姓名privateintage;/年龄privatedoublesalary=2000.0;/薪水publicEmployee(Stringname,intage,doublesalary)=name;this.age=age;this.salary=salary;publicEmployee()publicdoublegetSalary()returnsalary;classManagerextendsEmployeeprivatedoublebonus;/奖金publicvoidsetBonus(doublebonus)this.bonus=bonus;publicclassTestInheritancepublicstaticvoidmain(Stringargs)Managermanager=newManager();doublesal=manager.getSalary();System.out.println(继承的奖金为+sal);,publicclass比尔盖子/写属性Stringa=法拉利汽车;Stringcolor=红色;/方法publicvoidzhuanQian()System.out.println(我能赚500亿);publicvoidpao()System.out.println(跑300公里每秒);publicclass比尔盖子的儿子extends比尔盖子publicstaticvoidmain(Stringargs)/比尔盖子a;/a=new比尔盖子();比尔盖子的儿子b;b=new比尔盖子的儿子();System.out.println(b.a);System.out.println(b.color);b.pao();,6.1.2super关键字,super:表示对直接父类对象的引用,可以直接用super.xxx或super.xxx()来调用父类的属性和方法。注意:super()用在类的构造函数中时,必须是该函数的第一句代码。,classEmployee1privateStringname;/姓名privateintage;/年龄privatedoublesalary=2000.0;/薪水publicEmployee1(Stringname,intage,doublesalary)=name;this.age=age;this.salary=salary;publicEmployee1()publicdoublegetSalary()returnsalary;publicvoiddisplayInfo()System.out.println(name=+name+,age=+age);classManager1extendsEmployee1privatedoublebonus;/奖金privateStringposition;/职位publicManager1(Stringname,intage,doublesalary,Stringposition)super(name,age,salary);/子类的构造方法中,通过super关键字调用父类的显示有参构造方法,/写在第一句,通过调用父类的构造方法,完成对属性值的初始化this.position=position;publicvoidsetBonus(doublebonus)this.bonus=bonus;,publicclassMec1publicstaticvoidmain(Stringargs)Manager1m=newManager1(john,22,2333,vip);m.displayInfo();,classEmployee2privateStringname;/姓名privateintage;/年龄privatedoublesalary=2000.0;/薪水publicvoiddisplayInfo()System.out.println(name=+name+,age=+age);publicEmployee2(Stringname,intage,doublesalary)=name;this.age=age;this.salary=salary;classManager2extendsEmployee2privatedoublebonus;/奖金privateStringposition;/职位publicManager2(Stringname,intage,doublesalary,Stringposition)super(name,age,salary);this.position=position;super.displayInfo();publicvoidsetBonus(doublebonus)this.bonus=bonus;,publicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubManager2m=newManager2(john,22,2333,vip);,运行结果:name=john,age=22,Object类:Java.lang.Object是所有类的父类,所有的java类都直接或间接地继承了他。,Object类有以下实用方法:1.toString():返回代表该对象值的字符串2.equals(Objectobj)测试其他某个对象是否与此对象相等3.hashCode():返回该对象的哈希码值4.ClassgetClass():返回此对象运行时的类5.clone():克隆一个对象,创建并返回此对象的一个副本,publicclassTestObjectpublicstaticvoidmain(Stringargs)TestObjectobj=newTestObject();System.out.println(obj.toString();/打印对象字符串System.out.println(obj.hashCode();/打印对象的hash码System.out.println(obj.getClass();/显示obj对象对应的class对象的类名TestObjectobj2=newTestObject();System.out.println(obj.equals(obj2);/比较两个对象是否相等。,6.3多态1.概念:具有表现多种形态的能力的特征。2.JAVA中多态的实现1)方法重载overloading:用于在同一个类中有多个具有相同名称的方法,包括构造方法的重载,方法具有不同的参数列表。,importjava.util.ArrayList;publicclassOverLoadTest/属性/方法/构造方法的重载publicOverLoadTest()publicOverLoadTest(inti)publicOverLoadTest(ArrayListlist)/自定义方法的重载publicvoiddisplay()publicStringdisplay(inti,intj)return结果+i+j;,2)方法重写override:用于当子类和父类具有相同的名称、返回值和形参列表。,classFatherStringname=法拉利;Stringcolor=red;publicvoidsuDu()System.out.println(fathercarspeed=300km/h);publicclassSonextendsFatherpublicvoidsuDu()System.out.println(soncarspeed=8000km/h);publicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubSonc=newSon();c.suDu();,多态的实现:1.子类重写父类的方法2.编写方法时,使用父类定义的方法3.运行时,根据实际创建的对象类型动态决定使用哪个方法,classDaYinJi/打印机publicvoidgiveDaYin()System.out.println(默认打印无色);classCaiSePinterextendsDaYinJipublicvoidgiveDaYin()System.out.println(打印彩色字);classHeiBaiPinterextendsDaYinJipublicvoidgiveDaYin()System.out.println(打印黑白字);classPanDingpublicvoidjudge(DaYinJit)t.giveDaYin();publicclassTestPrinterpublicstaticvoidmain(Stringargs)PanDinghq=newPanDing();hq.judge(newCaiSePinter();/传彩色打印机的对象hq.judge(newHeiBaiPinter();/传黑白打印机的对象,6.3.3类型转换:1.一个父类变量可以指向其子类的对象2.一个父类变量不可以访问其子类的对象增加的成员3.可以使用“对象变量名instanceof类名(或接口名)”来判断该变量所指向的对象是否属于该类。向上转型(子类的对象可以直接当做父类的对象使用)向下转型(从父类对象到子类对象的转换,要用强制类型转换),6.3.3类型转换:向上转型(子类的对象可以直接当做父类的对象使用)、向下转型(从父类对象到子类对象的转换),classAnimalprivateStringname;Animal(Stringname)=name;publicStringgetName()returnname;classCatextendsAnimalprivateStringeyesColor;Cat(Stringn,Stringc)super(n);eyesColor=c;publicStringgetEyesColor()returneyesColor;classDogextendsAnimalprivateStringfurColor;Dog(Stringn,Stringc)super(n);furColor=c;publicStringgetFurColor()returnfurColor;,publicclassTestCastpublicstaticvoidmain(Stringargs)Animala=newAnimal(动物);Animalc=newCat(猫,black);Dogd=newDog(狗,yellow);System.out.println(ainstanceofAnimal);/动物属于动物System.out.println(cinstanceofAnimal);/猫属于动物System.out.println(dinstanceofAnimal);/狗属于动物System.out.println(ainstanceofCat);/属于关系动物不属于猫/向上转型Animalan=newDog(旺财,yellow);/小类型放到大的类型里是可以/Animalan=new猫科类();猫科类b=new红猫类();红猫类c;/这时候你知道最原始的类型是什么类型吗?an.getClass();System.out.println(an.getName();System.out.println(an.getClass();/通过上转后模糊了类型,可以通过Object类继承下来的、/的.getClass()/方法将原形显示出来/System.out.println(an.getFurColor();/error!System.out.println(aninstanceofAnimal);/true狗是动物System.out.println(aninstanceofDog);/true狗也是狗/向下转型,要加强制转换符/-为了安全起见,要加instanceof判断Dogd2=(Dog)an;/Catc2=(Cat)an;System.out.println(d2.getFurColor();/-测试类,6.3.4动态绑定:在执行期间而不是编译时判断所引用的对象的实际类型,根据其实际的类型调用其相应的方法。,条件:1.要有继承2.要有重写3.要有父类变量指向子类对象4.要有父类变量调用重写的方法,classChaZuopublicvoidtongDian()/插座System.out.println(通电功能!);classDianShiJiextendsChaZuopublicvoidtongDian()System.out.println(电视机通电,看电视);classDianNaoextendsChaZuopublicvoidtongDian()System.out.println(电脑通电,编Java程序);classPingDingpublicvoidjudge(ChaZuoc)c.tongDian();/判定publicclassTestDynamicBindingpublicstaticvoidmain(Stringargs)PingDingp=newPingDing();p.judge(newDianNao();p.judge(newDianShiJi();/多态调用动态绑定,6.4访问修饰符,private:私有的,只有在类的主体中才可以访问。protected:受保护的,该类及子类的成员都可访问public:公共的,该类或非该类都可访问默认的,不使用修饰符,只有相同包中的类可以访问,位置private默认protectedpublic,同一个类是是是是,同一个包内的类否是是是,不同包内的子类否否是是,不同包并且不是子类否否否是,classTprivateinti=10;intj=100;protectedintk=1000;publicintm=100000;publicclassTestAccesspublicstaticvoidmain(Stringargs)Tt=newT();/System.out.println(t.i);/私有的不能访问System.out.println(t.j);System.out.println(t.k);System.out.println(t.m);,6.5static修饰符:可修饰变量、方法、代码块。1.静态变量:用static修饰的变量叫静态变量。类中的静态变量属于类,而不属于某个特定的对象类中的静态成员可以与类的名称一起使用,而无需创建类的对象静态变量或方法也称为类的变量或方法不管创建了类的多少实例,整个类中静态变量的副本只有一个引用静态变量时建议使用类名来调用声明为static的变量实质上就是全局变量,1.静态变量:classChinesestaticStringcountry=China;Stringname;intage;voidsingOurCountry()System.out.println(Mydear+country);publicclassTestChinesepublicstaticvoidmain(Stringa)System.out.println(chinesecountryis+Chinese.country);/通过类名来访问静态属性Chinesech1=newChinese();System.out.println(chinesecountryis+ch1.country);/通过对象来访问静态属性ch1.singOurCountry();,2静态方法:用static修饰的方法类的静态方法只能访问其他的静态成员,不能访问非静态成员静态方法中没有this关键字静态方法不能被覆盖(重写)为非静态方法classStaticFunstaticinti=10;intj;staticvoidsetValue(intx)/j=x;/出错System.out.println(+i);,3静态代码块:由static与组成的代码片段,如果需要通过计算来初始化静态变量,可以声明一个静态块静态块仅在该类被加载时执行一次只能初始化类的静态数据成员publicclassTryInitializationstaticintvalues=newint10;/静态数组成员staticfor(inti=0;ivalues.length;i+)valuesi=(int)(100.0*Math.random();,4单态设计模式:某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。singleton,publicclassTestSingle/形式一privatestaticfinalTestSingleonlyone=newTestSingle();/前面加privatestaticfinal修饰后只能产生一个对象privateTestSingle()/不能在类的外部new但在类的内部可以publicstaticTestSinglegetTestSingle()returnonlyone;/外面只能通过方法调用获得一个对象,publicclassSingleton/形式二privatestaticSingletoninstance=null;publicstaticsynchronizedSingletongetInstance()/这个方法比上面有所改进,不用每次都进行生成对象,只是第一次/使用时生成实例,提高了效率!if(instance=null)instance=newSingleton();returninstance;,6.6final修饰符,1.final修饰类:不能被子类继承2.final修饰方法:子类不能覆盖此方法使用在方法声明中使用final关键字表明子类不能覆盖此方法使用在声明类中,一个final方法只被实现一次使用如果一个类为final类,那么他所有的方法都为隐式的final方法,3.final修饰变量:一个变量可以声明为final,以阻止他的内容被修改声为final变量后,变量只能被初始化一次,然后就不能修改值了一个final变量实质上是一个常量,6.7abstract修饰符:,修饰的类为抽象类,不能被实例化构造方法和static方法不能是抽象的父类的抽象方法往往在子类中实现,抽象类可以具有指向子类对象的对象引用,abstractclassShape/形状类protecteddoublelength;/长protecteddoublewidth;/宽publicShape(doublelength,doublewidth)this.length=length;this.width=width;publicabstractdoublearea();/计算面积classRectangleextendsShape/矩形Rectangle(finaldoublenum,finaldoublenum1)super(num,num1);publicdoublearea()returnlength*width;classTriangleextendsShape/三角形Triangle(finaldoublenum,finaldoublenum1)super(num,num1);publicdoublearea()returnlength*width/2;classSquareextendsShape/*构造方法.*paramnum传递至构造方法的参数*paramnum1传递至

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论