java程序设计教程的源码
源代码在线查看: uptransferobjecttype.java
//【例4-11】 上转型对象的使用。
//程序清单4-11: UpTransferObjectType.java
package e4_11;
public class UpTransferObjectType {
public static void main(String args[]) {
A obja;// 声明类A的对象引用变量obja
B objb;// 声明类B的对象引用变量objb
obja = new B();// 对象obja为子类B对象的上转型对象
// 不论父类中的成员变量被子类隐藏与否,上转型对象始终访问父类中的成员变量(包括被隐藏的变量)
System.out.print("上 转 型对象obja:\n" + "a1 = " + obja.a1 + "\t" + "a2 = "
+ obja.a2 + "\t");
// 若父类中的方法没被子类重写,则上转型对象访问的方法是原父类中的方法
obja.arithmeticOperation(10, 10);
// 若父类中的方法被子类重写,则上转型对象访问的方法必定是子类中重写的方法
obja.fatherMethod();
// 上转型对象不能访问子类中新增的成员变量和成员方法
// System.out.println(obja.c1);
objb = (B) obja;// 将上转型对象强制转换为子类对象
// 若父类中的成员变量被子类隐藏,则子类对象必定访问子类中重新定义的成员变量
System.out.print("\n强制转换对象objb:\n" + "a1 = " + objb.a1 + "\t" + "a2 = "
+ objb.a2 + "\t");
// 子类对象调用继承自父类的方法
objb.arithmeticOperation(10, 10);
// 子类对象调用重写的方法
objb.fatherMethod();
// 子类对象调用新增的成员变量
System.out.println("c1 = " + objb.c1);//
}
}
class A {// 类A
int a1 = 10;
int a2 = 100;
public void arithmeticOperation(int x, int y) {
System.out.println("x + y = " + (x + y));
}
public void fatherMethod() {
System.out.println("调用父类A的方法:fatherMethod()");
}
}
class B extends A {// 类B继类A
// 继承了父类的成员变量a1和成员方法arithmeticOperation()
int a2 = 1000;// 隐藏(重写)父类的成员变量
int c1 = 10000;// 子类新增的成员变量
public void fatherMethod() {// 重写父类中的成员方法
System.out.println("调用子类B的方法:fatherMethod()");
}
}