您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 4. 尚硅谷_佟刚_Java基础_Java类设计
本章内容Java类的继承方法的重写、覆盖访问控制super关键字多态性及其应用Object类及其主要方法本章内容Java类的继承方法的重写、覆盖多态性及其应用成员访问控制对象的创建和初始化细节几种常用的Java类类的继承(1)为描述和处理个人信息,定义类Person:publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}Person+name:String+age:int+birthDate:Date+getInfo():String类的继承(2)为描述和处理学生信息,定义类Student:publicclassStudent{publicStringname;publicintage;publicDatebirthDate;publicStringschool;publicStringgetInfo(){...}}Student+name:String+age:int+birthDate:Date+school:String+getInfo():String类的继承(3)通过继承,简化Student类的定义:publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}publicclassStudentextendsPerson{publicStringschool;}//Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以利用。Person+name:String+age:int+birthDate:Date+getInfo():StringStudent+school:String类的继承(4)类继承语法规则:修饰符class子类名称[extends父类]{属性和方法的声明}类的继承(5)Java只支持单继承,不允许多重继承–一个子类只能有一个父类–一个父类可以派生出多个子类单继承举例Person+name:String+age:int+birthDate:Date+getInfo():StringStudent+school:StringSoldierOfficerGraduate+major:String+register():void父类子类孙子类类的继承(6)子类继承了父类,就继承了父类的方法和属性。在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。因而,子类通常比父类的功能更多。在Java中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。关于继承的规则:子类不能继承父类中私有的(private)的成员变量和方法。练习11.(1)定义一个ManKind类,包括–成员变量intsex和intsalary;–方法voidmanOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);–方法voidemployeed():根据salary的值显示“nojob”(salary==0)或者“job”(salary!=0)。(2)定义类Kids1继承ManKind,并包括–成员变量intyearsOld;–方法printAge()打印yearsOld的值。(3)在Kids1类的main方法中实例化Kids1的对象someKid,用该对象访问其父类的成员变量及方法。练习12.根据下图实现类。在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积。Circle(圆)-radius:doubleCircle():构造方法,将radius属性初始化为1+setRadius(doubleradius):void+getRadius():double+findArea():double计算圆的面积Cylinder(圆柱)-length:doubleCylinder():构造方法,将length属性初始化为1+setLength(doublelength):void+getLength():double+findVolume():double计算圆柱体积本章内容Java类的继承访问控制方法的重载、覆盖super关键字多态性及其应用Object类及其主要方法访问控制修饰符同一个类同一个包子类整体privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes可以对Java类中定义的属性和方法进行访问控制----规定不同的保护等级:public、protected、default、private访问控制举例(1)classParent{privateintf1=1;intf2=2;protectedintf3=3;publicintf4=4;privatevoidfm1(){System.out.println(infm1()f1=+f1);}voidfm2(){System.out.println(infm2()f2=+f2);}protectedvoidfm3(){System.out.println(infm3()f3=+f3);}publicvoidfm4(){System.out.println(infm4()f4=+f4);}}访问控制举例(2)classChildextendsParent{//设父类和子类在同一个包内privateintc1=21;publicintc2=22;privatevoidcm1(){System.out.println(incm1()c1=+c1);}publicvoidcm2(){System.out.println(incm2()c2=+c2);}publicstaticvoidmain(Stringargs[]){inti;Parentp=newParent();i=p.f2;//i=p.f3;i=p.f4;p.fm2();//p.fm3();p.fm4();Childc=newChild();i=c.f2;//i=c.f3;i=c.f4;i=c.c1;//i=c.c2;c.cm1();//c.cm2();c.fm2();c.fm3();c.fm4()}}访问控制分析f2_defaultc2_publicf3_protectedf4_publicc1_private子类对象可以访问的数据子类的对象可以调用的方法fm2()_defaultfm3()_protectedfm4()_publiccm2()_publiccm1()_private父类Parent和子类Child在同一包中定义时:本章内容Java类的继承访问控制方法的重写、覆盖super关键字多态性及其应用Object类及其主要方法覆盖方法在子类中可以根据需要对从父类中继承来的方法进行改造—覆盖方法(方法的重置、重写),在程序执行时,子类的方法将覆盖父类的方法。覆盖方法必须和被覆盖方法具有相同的方法名称、参数列表和返回值类型。覆盖方法不能使用比被覆盖方法更严格的访问权限。覆盖方法举例(1)publicclassPerson{publicStringname;publicintage;publicStringgetInfo(){returnName:+name+\n+age:+age;}}publicclassStudentextendsPerson{publicStringschool;publicStringgetInfo(){//覆盖方法returnName:+name+\nage:+age+\nschool:+school;}publicstaticvoidmain(Stringargs[]){Students1=newStudent();s1.name=Bob;s1.age=20;s1.school=school2;System.out.println(s1.getInfo());//Name:Bobage:20school:school2}}Personp1=newPerson();p1.getInfo();//调用Person类的getInfo()方法Students1=newStudent();s1.getInfo();//调用Student类的getInfo()方法这是一种“多态性”:同名的方法,用不同的对象来区分调用的是哪一个方法。覆盖方法举例(2)classParent{publicvoidmethod1(){}}classChildextendsParent{privatevoidmethod1(){}//非法,子类中的method1()的访问权限private比被覆盖方法的访问权限public弱}publicclassUseBoth{publicvoiddoOtherThing(){Parentp1=newParent();Childp2=newChild();p1.method1();p2.method1();}}修改练习1中定义的类Kids1,在Kids1中重新定义employed()方法,覆盖父类ManKind中定义的employed()方法,输出“Kidsshouldstudyandnojob.”练习2本章内容Java类的继承访问控制方法的重载、覆盖super关键字super关键字子类对象的实例化过程多态性及其应用Object类及其主要方法关键字super在Java类中使用super来引用父类的成分–super可用于访问父类中定义的属性–super可用于调用父类中定义的成员方法–super可用于在子类构造方法中调用父类的构造方法–super的追溯不仅限于直接父类关键字super举例publicclassPerson{privateStringname;privateintage;publicStringgetInfo(){returnName:+name+\nage:+age;}}publicclassStudentextendsPerson{privateStringschool=NewOriental;publicStringgetSchool(){returnschool;}publicStringgetInfo(){//调用父类的方法returnsuper.getInfo()+\nschool:+school;}}1.修改练习3中定义的类Kids1中employed()方法,在该方法中调用父类ManKind的employed()方法,然后再输出“butKidsshouldstudyandnojob.”2.修改练习1中定义的Cylinder类,在Cylinder类中覆盖findArea()方法,计算圆柱的表面积。考虑:findVolume方法怎样做相应的修改?在TestCylinder类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的表面积和体积。附加题:在TestCylinder类中创建一个Circle类的对象,设置圆的半径,计算输出圆的面积。体会父类和子类成员的分别调用。练习4构造方法不能继承子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法在一个Java类中可以通过两种方式获得构造方法–使用系统默认的无参数构造方法–显式定义一个或多个构造方法一旦显式定义了构造方法,则系统不再提供默认构造方法调用父类构造方法在子类的构造方法中可使用super(参数列表)语句调用父类的构造方法如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构
本文标题:4. 尚硅谷_佟刚_Java基础_Java类设计
链接地址:https://www.777doc.com/doc-5594833 .html