资源描述:
《java基础知识第5章子类与继承》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第5章子类与继承5.1子类与父类1)继承是一种由已有的类创建新类的机制。2)Java不支持多重继承,即子类只能有一个父类。5.1.1声明子类例如:classStudentextendsPeople{}把Student类定义为People的子类。5.1.2类的树形结构如果c是b的子类,b又是a的子类,习惯上称c是a的子孙类。Java的类按照继承关系形成树形结构,在这个树形结构中根节点是Object类(Object类是java.lang包中的类),即Object类是所有类的祖先类。如果一个类的声明中没有使用extends关键字,这个类被系统
2、默认认为是Object的子类。5.2子类的继承性5.2.1子类和父类在同一包中的继承性如果子类和父类在同一包中,那么子类自然地继承了父类中不是private的成员变量和方法。5.2.2子类和父类不在同一包中的继承性子类和父类不在同一包中时,父类中的private和友好访问权限的成员变量不会被子类继承。子类只继承父类中的protected和public访问权限的成员变量5.2.3继承关系的UML图5.2.4protected的进一步说明53子类与对象5.3.1子类对象的特点1)•当子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变
3、量被分配了内存,而且父类的成员变量也都被分配了内存空间。但只将子类继承的那部分成员变量作为分配给子类对象的变量。即子类不继承父类的私有成员变量。2).如果子类和父类不在同一包中,尽管父类的友好成员变量分配了内存空间,但也不作为子类对象的变量,即如果子类和父类不在同一包中,子类不继承父类的友好成员变5.3.2关于instanceof运算符5.4成员变量的隐藏和方法重写5.4.1成员变量的隐藏子类声明的成员变量和从父类继承来的成员变量名字相同,子类就会隐藏所继承的成员变量。子类继承的方法只能操作子类继承和隐藏的成员变量,子类新定义的方法可以
4、操作子类继承和子类新声明的成员变量,但无法操作子类隐藏的成员变量(需使用super关键字操作隐藏的成员变量。)5.4.2方法重写(Overwride)1)子类通过重写可以隐藏已继承的方法。2)重写规则:子类继承了父类的某个方法,子类就有权重写这个方法”是指子类中定义了一个方法,这个歌方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型。2)重写目的:子类通过方法重写可以隐藏继承的方法,子类通过方法重写可以把父类的状态和行为改变为自身的状态和行为。4)重写方法既可以操作继承的成员变量、调用继承的方法‘也可以操作子类新声明的成员变
5、量,和子类新定义的其他方法”但无法操作被子类隐藏的成员变量和方法。必须使用super关键字。5.5super关键字5.5.1用super操作被隐藏的成员变量和方法1)子类一旦隐藏了继承的成员变量和方法,那么子类创建的对象就无法拥有该变量和方法,需使用super关键字。例子:classSum{intn;floatf(){fIoatsum=0;for(inti=1;i<=n;i++)1011121314151617181920212223242526272829303132sum=sum+i;returnsum;}}classAverage
6、extendsSum'flaotf(){fIaotc;super.n=n;c=super.f();returnc/n;5.5.2使用super调用父类的构造方法1)当用子类的构造方法创建一个子类的对象时”子类的构造方法总是先调用父类的某个构造方法,也就是说,如果子类的构造方法没有明显指明使用父类的那个构造方法”子类就调用父类的不带参数的构造方法。2)由于子类不继承父类的构造方法”因此,子类在其构造方法中需使用super关键字来调用父类的构造方法,而且super必须是子类构造方法中头一条语句,即如果在子类的构造方法中,没有明显的写出sup
7、er关键字来调用父类的某个构造方法,那么默认有:superQ;packagecom.Super;classStudent{intnumber;Stringname;Student(){7891011121314151617181920212223242526272829Student(intnumber,Stringname){this.number=number;this.name=name;System.out.printIn(M我的名字是:M+name+"学号是:M+number);}}classUniverStuderrtext
8、endsStudent{booleanmarried;UniverStudent(intnumber,Stringname,booleanb){super(number,name);married=b;Sy