有这样的一个小程序,我觉得结果完全和预料的不一样,为什么呢?
程序如下:
class A5{
int x=6;int y=5;
public void printme(){
System.out.println("class name: " +getClass().getName());}}
public class Test10 extends A5{
int x=9;
public void printme(){ 
int z=super.x+6;
super.printme(); 
System.out.println("I am an "+getClass().getName()); 
}
public static void main(String arg[]){ 
A5 p1=new A5();
Test10 p2=new Test10();
p1.printme();
p2.printme();
 }}运行结果为:
class name: A5
class name: Test10
I am an Test10
为什么不是:
class name: A5
class name: A5
I am an Test10

解决方案 »

  1.   

    super.printme(),你只是调用了父类的方法,但是你是在子类中调用的啊,所以getclass得到的是当前类,也就是子类Test10。不知道我说得明不明白。
      

  2.   

    楼上说的对,对于super.printme(),虽然说是调用了父类的方法,但是你是在子类中调用的,那么就相当于把父类的那个方法放在子类中了,因此getClass()所取得的也就是你当前这个类的class名字
      

  3.   

    楼上说的对呀;
    你在Test10里调用的printme(),
    而printme()又调用了getClass(),
    根据多态,这时候是调用的是Test10.getClass().
      

  4.   

    可是子类中实例化父类对象,调用的父类方法,就是class name: A5
    而用super调用父类的方法就是class name: A10
    那就是说super不等同于父类对象,是么?
      

  5.   


    如果父类是抽象类,就根本没有对象可言,
    所以super不是指父类对象,
      

  6.   

    java中的方法是动态绑定的
    java虚拟机在运行super.printme(); 时,自动将class A5中的method printme()挂到object p2上来,java虚拟机能够区分this.printme()和super.printme(),所以运行的结果是 Test10在子类Test10中,并没有也不会实例化父类对象
    super不是指父类对象,
    而是指 当前这个子类对象中,属于父类的那一部分方法和属性一个子类对象的组成大致是这样的      obj of subclass ---|    根类(object类)区域   |
                             |---------------------------|   
                             |           子类            |
                             |---------------------------|
                                         .
                                         .
                                         .          ---> 非直接父类均已不能用super.××引用了
                                         .
                             |---------------------------|
                             |          直接父类         |     ---> 可以用super.××引用
                             |---------------------------|
                             |           当前类          |     ---> 可以用this.××引用
                             |---------------------------|