类的继承最新

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

辽宁省交通高等专科学校Java开发技术类的继承制作人:王皓辽宁省交通高等专科学校Java开发技术如何理解继承继承是一种由已有的类创建新类的机制。是面向对象编程技术的一块基石。–对面向对象程序设计语言中对象多态性的实现。–代码复用的一种形式。–继承的概念来源于分类学的概念生物植物动物人类猫类辽宁省交通高等专科学校Java开发技术如何理解继承被继承的类叫超类(superclass),父类或者基类。继承超类的类叫子类(subclass)。–子类可以理解为是超类的一种,它除了继承超类中的所有特征,同时还拥有自己的新的特征。Java中继承的本质:定义一个通用类,在这个通用类的基础上,派生出具有丰富功能的子类。Java中类的继承:单继承。辽宁省交通高等专科学校Java开发技术继承的语法和规则如果要声明类B继承类A,则必须满足两个条件:–(1)类A非final–(2)类A是public或类B与类A同包语法:修饰符classBextendsA{……}说明:子类将拥有在其父类和祖先类中声明的所有public或protected的成员,访问不到父类中用private修饰的成员。辽宁省交通高等专科学校Java开发技术子类的继承publicclassPerson{Stringname;intage;publicvoidsayHello(){System.out.println(hello+name);}}publicclassStudentextendsPerson{intscore;publicvoidstudy(){System.out.println(score=+score);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Personp=newPerson();p.name=zhangsan;p.sayHello();Studentstu=newStudent();stu.score=90;stu.study();}}辽宁省交通高等专科学校Java开发技术类和对象在JVM中的表示在JVM中类被表示为一块内存区域,分别存放类名和类的静态成员,可以用以下的图形表示:SomeClassstaticfield1staticmethod1staticfield2staticfield3staticmethod2类名域区方法区classA{staticintsa=100;staticintsb=1000;staticvoidsma(){…}inta=10;intb=100;voidma(){…}}Asbsma1000…………sa100辽宁省交通高等专科学校Java开发技术类和对象在JVM中的表示在JVM中对象也被表示为一块内存区域,分别存放到对象所属类的引用和对象的成员,可以用以下的图形表示::classReffield1method1field2field3method2类的引用域区方法区Ara1=newA();Ara2=ra1;ra1ra2A:Abma100…………a10辽宁省交通高等专科学校Java开发技术classBextendsA{staticintsb=100;intb=10;voidma(){…}}Ara1=newA();Brb1=newB();ra1=rb1;BA/sbsma1000…………A/sa100B/sb100AA/sbsma1000…………A/sa100:BA/bma100…………A/a10B/b10:Abma100…………a10ra1rb1辽宁省交通高等专科学校Java开发技术子类实例化的过程子类对象的成员初始化之前必须完成父类或祖先类对象的成员的初始化,初始化的方式有两种:隐式初始化和显式初始化隐式初始化:当父类提供了默认的构造方法,且子类的构造方法中没有显式调用父类的其它构造方法,则在执行子类的构造方法之前会自动执行父类的构造方法,直到执行完Object的构造方法后才执行子类的构造方法。classA{inta,b;A(){a=100;}}classBextendsA{intc,d;B(){c=200;}}Brb=newB();newB()AObjecta=100;……c=200;c=0;d=0;a=0;b=0;调用A()调用Object()返回返回辽宁省交通高等专科学校Java开发技术子类实例化的过程显式初始化:可以在子类构造方法的第一条语句通过super()或super(…)调用父类的默认构造方法或特定签名的构造方法当父类没有提供默认构造方法时,必须在子类构造方法第一条语句通过super(…)完成父类对象成员的初始化工作。classA{inta,b;A(intc,intd){a=c;b=d;}}classBextendsA{intc;B(inti){c=i;}}错误B(inti,intj,intk){super(i,j);c=k;}辽宁省交通高等专科学校Java开发技术子类实例化的过程结论:子类在实例化时总是先调用其父类的构造方法,执行完父类的构造后,再构造子类。解释下面的继承关系图。BACDE辽宁省交通高等专科学校Java开发技术方法重写方法重写(或方法覆盖):子类中的方法与它父类中的方法有相同的方法名,参数列表和返回值类型。子类通过方法的重写可以隐藏继承的方法。辽宁省交通高等专科学校Java开发技术方法重写实例publicclassPerson{Stringname;intage;publicvoidsayHello(){System.out.println(hello+name);}}publicclassStudentextendsPerson{Stringschool;publicvoidsayHello(){System.out.println(welcometo+school);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Studentstu=newStudent();stu.school=lncc;stu.sayHello();}}辽宁省交通高等专科学校Java开发技术方法重写的规则方法覆盖的规则:1.发生在父类和子类的同名方法之间;2.两个方法的返回值类型必须相同;3.两个方法的参数类型、参数个数、参数顺序必须相同;4.重写的方法可以保持和父类的方法相同的可访问范围,也可以修改访问控制修饰符增大可访问范围,但是不能减小可访问范围;privatedefaultprotectedpublic5.子类方法只能抛出父类方法声明抛出的异常或异常子类(后续章节);辽宁省交通高等专科学校Java开发技术super关键字如果子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了从父类继承的成员变量。如果在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。作用:调用父类的成员。如属性、方法或者是构造方法。用法:–调用父类的构造方法:格式:super(参数列表)–调用父类方法、属性:格式:super.属性(方法)辽宁省交通高等专科学校Java开发技术super关键字举例classSum{intn;floatf(){floatsum=0;for(inti=1;i=n;i++)sum=sum+i;returnsum;}}classAverageextendsSum{intn;floatf(){floatc;super.n=n;c=super.f();returnc/n;}}publicclassTest{publicstaticvoidmain(Stringargs[]){Averageave=newAverage();ave.n=100;System.out.println(result=+ave.f());}}辽宁省交通高等专科学校Java开发技术final关键字用途:–final变量:即常量–final方法:不允许被子类覆盖–final类:不能被继承辽宁省交通高等专科学校Java开发技术final关键字使用final阻止方法覆盖publicclassA{finalvoidmeth(){System.out.println(Thisisafinalmethod.);}}publicclassBextendsA{voidmeth(){System.out.println(“illegal!);}}编译时产生错误。辽宁省交通高等专科学校Java开发技术final关键字使用final阻止继承publicfinalclassA{//...}//Thefollowingclassisillegal.publicclassBextendsA{//ERROR!Can'tsubclassA//...}编译时产生错误。辽宁省交通高等专科学校Java开发技术final关键字•使用final阻止变量修改:classCar{intnumber=1234;}classFinalVariable{publicstaticvoidmain(Stringargs[]){finalCarmycar=newCar();mycar.number=8888;//合法mycar=newCar();//非法}}辽宁省交通高等专科学校Java开发技术练习题1:下面的程序能否通过编译?如果不能找出原因并改正。importjava.util.*;publicclassPerson{privateStringname;privateintage;privateDatebirthDate;publicPerson(Stringname,intage,Dated){this.name=name;this.age=age;this.birthDate=d;}publicPerson(Stringname,intage){this(name,age,null);}publicPerson(Stringname,Dated){this(name,30,d);}publicPerson(Stringname){this(name,30);}}辽宁省交通高等专科学校Java开发技术练习publicclassStudentextendsPerson{privateStringschool;publicStudent(Stringname,intage,Strings){super(name,age);school=s;}publicStudent(Stringname,Strings){super(name);school=s;}publicStudent(Strings){school=s;}}辽宁省交通高等专科学校Java开发技术作业题2:分析下面程序对子类实例化的过程。importjava.util.*;publicclassPerson{privateStringname;privateintage=0;privateDatebirthDate;privateStringinfo;publicPerson(Stringn,Dated){name=n;birthDate=d;info=getInfo();}publicPerson(Stringn){this(n,null);}publicStringgetInfo(){returnName:+name+\nage:+age+\nBirthDate:+birthDate;}}辽宁省交通高等专科学校Java开发技术publicclassStudentextendsPerson{privateStringschool;publicStudent(Stringn,Stringd){super(n);school=d;}publicStringgetInfo(){returnsuper.getInfo()+\nSchool:+school;}}辽宁省交通高等专科学校Java开发技术

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功