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访问权限的方法作为子类的方法。