5.2 子类的继承性
类可以有两种重要的成员:成员变量和方法。子类的成员中有一部分是子类自己声明、定义的,另一部分是从它的父类继承的。那么,什么叫继承呢?所谓子类继承父类的成员变量作为自己的一个成员变量,就好像它们是在子类中直接声明一样,可以被子类中自己定义的任何实例方法操作,也就是说,一个子类继承的成员应当是这个类的完全意义的成员,如果子类中定义的实例方法不能操作父类的某个成员变量,该成员变量就没有被子类继承;所谓子类继承父类的方法作为子类中的一个方法,就像它们是在子类中直接定义了样,可以被子类中自己定义的任何实例方法调用。
5.2.1 子类和父类在同一包中的继承性
如果子类和父类在同一个包中, 那么,子类自然地继承了其父类中不是private的成员变最作为自己的成员变量,并且也自然地继承了父类中不是Pivate的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。下面的例子1中有4个类: Pcople.、Student.java、 UnivrStudent.java和Eaxmple5_1,这此类都没有包名(需要分别打开文本编辑器编写、保存这些类的源文件,例如保存到C:\ch5目录中),其中UniverStudent 类是Student的子类,StudentPople的子类。
如果子类和父类在同一个包中, 那么,子类自然地继承了其父类中不是private的成员变最作为自己的成员变量,并且也自然地继承了父类中不是Pivate的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。下面的例子1中有4个类: Pcople.、Student.java、 UnivrStudent.java和Eaxmple5_1,这此类都没有包名(需要分别打开文本编辑器编写、保存这些类的源文件,例如保存到C:\ch5目录中),其中UniverStudent 类是Student的子类,StudentPople的子类。
例子:
People.java
public class People{ int age,leg = 2,hand = 2; protected vold showPelpleMess(){ system,out.printf("%d岁,%d只脚,%d只手\t",age, leg,hand); } }
Student.java
public class Student extends People { int number; void tellNumber() { System.out.printf("学号:%d\t",number); } int add(int x,int y) { return x+y; } }
UniverStudent.java
public class UniverStudent extends Student { int multi(int x,int y){ return x*y; } }Example5_1.java
package myJava; import java.*; import java.util.Scanner; public class Example5_1 { public static void main(String args[]) { Student zhang = new Student(); zhang.age = 17; //访问继承的成员变量 zhang.number=100101; zhang.showPeopleMess(); //调用继承的方法 zhang. tellNumber(); int x=9,y=29; System.out.print("会做加法:"); int result=zhang.add(x,y); System.out.printf("%d+%d=%d\n",x,y,result); Universtudent geng = new Universtudent(); geng.age = 21; //访问继承的成员变量 geng.number=6609; //访问继承的成员变量 geng.showPeopleMess(); //调用继承的方法 geng.tellNumber(); //调用继承的方法 System.out.print("会做加法:"); Result=geng.add(x,y); //调用继承的方法 System.out.print("%d+%d=%d\t”,x,y,result"); System.out.print("会做乘法:"); Result=geng.multi(x,y); System.out.print("%d*%d=%d\t",x,y,result); } }
5.2.2 子类和父类不在同一包中的继承性
当子类和父类不在同一个包中时,父类中的private和友好访问权限的成员变量不会被子类继承,也就是说,子类只继承父类中的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的proected和public访问权限的方法作为子类的方法。
当子类和父类不在同一个包中时,父类中的private和友好访问权限的成员变量不会被子类继承,也就是说,子类只继承父类中的protected和public访问权限的成员变量作为子类的成员变量;同样,子类只继承父类中的proected和public访问权限的方法作为子类的方法。