Java-面向对象(高级篇)--继承的进一步研究了解了继承的基本概念后,下面对继承操作中的一些注意点进行研究。子类对象的实例化过程在继承的操作中,对于子类对象实例化也是有要求的,及子类对象在实例化之前必须首先调用父类中的构造方法后在调用自己的构造方法。【子类的实例化过程】classPerson{ privateStringname; privateintage; publicPerson(){ ("这是父类中的构造方法"); } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ =age; }}classStudentextendsPerson{ privateStringschool; publicStudent(){ ("这是子类中的构造方法"); } publicvoidsetSchool(Stringschool){ =school; } publicStringgetSchool(){ returnschool; } }lassExtDemo2{ publicstaticvoidmain(Stringargs[]){ Studentstu=newStudent(); ("张三"); (19); ("ZZU"); ("姓名:"+()+",年龄:"+()+",学校:"+()); }}运行结果为:从运行结果可以清楚的发现,子类对象在实例化前会默认调用父类中的构造方法。就好像没有父类就没有孩子。当然对于以上代码实际上在子类的构造方法中隐含了一个super()的语法,代码如下:classStudentextendsPerson{ privateStringschool; publicStudent(){ super(); ("这是子类中的构造方法"); } publicvoidsetSchool(Stringschool){ =school; } publicStringgetSchool(){ returnschool; } }以上程序的运行结果与之前是一样的。super表示超级的意思,在一些书中也喜欢把父类叫做超类,上面的语法就是表示子类可以直接使用super()调用父类(超类)中的无参构造。方法的覆写在继承的关系中也存在着方法覆写的概念,所谓的方法覆写就是子类定义了与父类中名称相同的方法,但是在覆写时必须考虑到权限,即被子类覆写的方法不能拥有比父类方法更严格的访问权限。【方法的覆写】classPerson{ voidprint(){ ("Person-->voidprint(){}"); }}classStudentextendsPerson{ publicvoidprint(){ ("Student-->voidprint(){}"); }}lassOverrideDemo01{ publicstaticvoidmain(Stringargs[]){ newStudent().print(); }}运行结果为:从程序的运行结果可以发现,Student子类定义了与Person父类中同名的方法,但是在子类中此方法的访问权限被扩大了,符合覆写的概念,当方法被覆写后,子类对象调用的就是被覆写后的方法。需要注意的是,在被子类覆写的方法权限缩小时,会在编译时产生错误。实际上与方法的覆写概念相同的还有另外一种称为属性的覆盖,这点在开发中使用较少。【属性的覆盖】classPerson{ publicStringinfo="ZZU";}classStudentextendsPerson{ publicStringinfo="zhao"; publicvoidprint(){ ("父类中的属性:"+); ("子类中的属性:"+); }}lassOverrideDemo05{ publicstaticvoidmain(Stringargs[]){ newStudent().print(); }}
Java-面向对象(高级篇)--继承的进一步研究精品word 来自淘豆网m.daumloan.com转载请标明出处.