您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 第4章-高级类特性1
第4章高级类特性1JavaSE知识图解JAVA发展历程JAVA环境搭建基础程序设计数据类型流程控制运算符数组面向对象编程类和对象属性方法设计模式接口三大特性应用程序开发JDBC集合异常处理类库多线程IO反射网络连接OracleJAVA新特性Eclipse使用泛型枚举装箱/拆箱可变参数Annotation本章内容4.1面向对象特征之二:继承4.2方法的重写(override)4.3四种访问权限修饰符4.4关键字super4.5子类对象实例化过程4.6面向对象特征之三:多态4.7Object类、包装类4.1面向对象特征之二:继承为描述和处理个人信息,定义类Person:publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}Person+name:String+age:int+birthDate:Date+getInfo():String继承(1)为描述和处理学生信息,定义类Student:publicclassStudent{publicStringname;publicintage;publicDatebirthDate;publicStringschool;publicStringgetInfo(){...}}Student+name:String+age:int+birthDate:Date+school:String+getInfo():StringStudent类Worker类Teacher类Person类通过类的继承Farmer类特有的代码特有的代码特有的代码特有的代码学生类教师类工人类农民类人类通过继承的方式实现继承(2)通过继承,简化Student类的定义:publicclassPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){...}}publicclassStudentextendsPerson{publicStringschool;}//Student类继承了父类Person的所有属性和方法,并增加了一个属性school。Person中的属性和方法,Student都可以利用。Person+name:String+age:int+birthDate:Date+getInfo():StringStudent+school:String为什么要有继承?多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。此处的多个类称为子类,单独的这个类称为父类(基类或超类)。可以理解为:“子类isa父类”类继承语法规则:classSubclassextendsSuperclass{}继承(3)继承(4)作用:继承的出现提高了代码的复用性。继承的出现让类与类之间产生了关系,提供了多态的前提。不要仅为了获取其他类中某个功能而去继承类的继承(5)子类继承了父类,就继承了父类的方法和属性。在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。在Java中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”。关于继承的规则:子类不能直接访问父类中私有的(private)的成员变量和方法。单继承举例Person+name:String+age:int+birthDate:Date+getInfo():StringStudent+school:StringSoldierOfficerGraduate+major:String+register():voidsuperclasssubclasssubsubclass类的继承(6)Java只支持单继承,不允许多重继承一个子类只能有一个父类一个父类可以派生出多个子类classSubDemoextendsDemo{}//okclassSubDemoextendsDemo1,Demo2...//error多重继承多层继承练习11.(1)定义一个ManKind类,包括成员变量intsex和intsalary;方法voidmanOrWorman():根据sex的值显示“man”(sex==1)或者“women”(sex==0);方法voidemployeed():根据salary的值显示“nojob”(salary==0)或者“job”(salary!=0)。(2)定义类Kids继承ManKind,并包括成员变量intyearsOld;方法printAge()打印yearsOld的值。(3)在Kids类的main方法中实例化Kids的对象someKid,用该对象访问其父类的成员变量及方法。练习12.定义一个学生类Student,它继承自Person类Person#name:String#sex:char#age:int+Person(name:Stringsex:charage:int)+toString():StringStudentnumber:longint:mathint:englishint:computer+Student(n:Strings:chara:intk:longm:inte:intc:int)+aver():double+max():int+min():int+toString():String练习13.根据下图实现类。在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计算圆柱体积4.2方法的重写(override)定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称方法的重置、覆盖,。在程序执行时,子类的方法将覆盖(重写)父类的方法。要求:重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。重写方法不能使用比被重写方法更严格的访问权限。重写和被重写的方法须同时为static的,或同时为非static的子类方法抛出的异常不能大于父类被重写方法的异常重写方法举例(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()方法p1=s1;p1.getinfo();//调用Student类的getInfo()方法这是一种“多态性”:同名的方法,用不同的对象来区分调用的是哪一个方法。classParent{publicvoidmethod1(){}}classChildextendsParent{privatevoidmethod1(){}//非法,子类中的method1()的访问权限private比被覆盖方法的访问权限public强}publicclassUseBoth{publicstaticvoidmain(String[]args){Parentp1=newParent();Childp2=newChild();p1.method1();p2.method1();}}重写方法举例(2)1.如果现在父类的一个方法定义成private访问权限,在子类中将此方法声明为default访问权限,那么这样还叫重写吗?(NO)2.修改练习1.1中定义的类Kids,在Kids中重新定义employed()方法,覆盖父类ManKind中定义的employed()方法,输出“Kidsshouldstudyandnojob.”练习2Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类对象成员的访问权限。4.3四种访问权限修饰符修饰符类内部同一个包子类任何地方privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes对于class的权限修饰只可以用public和default。public类可以在任意地方被访问。default类只可以被同一个包内部的类访问。访问控制举例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);}}访问控制举例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在同一包中定义时:classStudentextendsPersonStudents=newStudent();Personp=s;s:schoolName:id:name:AAage:1id:4.4关键字sup
本文标题:第4章-高级类特性1
链接地址:https://www.777doc.com/doc-1877996 .html