public class PrintClass {
int x = 0;
int y = 1; void printMe() {
System.out.println("x is " + x + ", y is " + y);
System.out.println("I am an instance of the class " +
super.getClass().getName());
}
}class PrintSubClass extends PrintClass {
int z = 3; public static void main(String[] arguments) {
PrintSubClass obj = new PrintSubClass();
obj.printMe();
}
}
****************************************************************
javac PrintClass.java后
执行: java PrintSubClass
为什么输出结果是 I am an instance of the class PrintSubClass
而不是 I am an instance of the class PrintClass ?
int x = 0;
int y = 1; void printMe() {
System.out.println("x is " + x + ", y is " + y);
System.out.println("I am an instance of the class " +
super.getClass().getName());
}
}class PrintSubClass extends PrintClass {
int z = 3; public static void main(String[] arguments) {
PrintSubClass obj = new PrintSubClass();
obj.printMe();
}
}
****************************************************************
javac PrintClass.java后
执行: java PrintSubClass
为什么输出结果是 I am an instance of the class PrintSubClass
而不是 I am an instance of the class PrintClass ?
PrintSubClass obj = new PrintSubClass();说明你是用PrintSubClass的构造方法来创建的一个PrintSubClass类的对象...
get的当然是这个名字啊..
所以输出的当然是I am an instance of the class PrintSubClass
每个类在运行时,多有一个class类。
而你实例的是PrintSubClass类,父类PrintClass并没有被实例。
看来问题是由“getClass()”产生的,getClass只针对我们new 的那个类。
(实际上由于printMe()方法是在PrintClass中的,在其中使用super关键字将会直接调用Object类的原版本方法,假如你要测试PrintClass类定义的方法,那么应该在其子类PrintSubClass中使用super关键字。)