class Super{
int index=50;
public void printVal(){
System.out.println("Super");
}
}
class Sub extends Super {
int index=2;
public void printVal() {
System.out.println("Sub");
}
}public class ExampleSub{
public static void main(String args[]){
Sub sub = new Sub();
System.out.print(sub.index + ", ");
sub.printVal();
Super sup = sub; //上转型
System.out.print(sup.index + ", ");
sup.printVal();
}
}
//输出 2,Sub
 //   50,Sub
第二行 为什么输出的是50,其他的输出可以理解.

解决方案 »

  1.   

    楼上说得对,第二次输出 sup.index 就是50。
    虽然这个sup是由sub转上去的,不过类型转为Super了,调用index就是调用Super的index。
      

  2.   

    第二次输出   sup.index   就是50。 
    虽然这个sup是由sub转上去的,不过类型转为Super了,调用index就是调用Super的index。
      

  3.   

    子类继承了超类的非私有属性和方法,但在Sub中printVal方法被重写了。方法可以被子类重写,但属性却不能重写。
    用netbeans跟踪一下就知道了,如下:
    变量         值 
    sub
      index     2
      继承的
        index   50
      

  4.   

    你声明的是两个变量的int  虽然都叫index 但是作用域不同!~
    第一个取得是sub内部的 index;
    第二个取得是super内部的 index;如果你将sub内部的index 删除掉!~
    那么它们都将指向同一个index;
    给出下面一个例子程序自己实验一下!可能比别人说很多要明白的深!~public class Test1 { static int index = 2;
    public static void main(String []args) {
    int index = 50;
    System.out.println(index);
    print();
    }
    public static void  print() {
    System.out.println(index);
    }
    }
      

  5.   

    因为数据成员是没有多态的,多态是适用于方法的。 比较倾向与这种说法. 但是还有疑问. 为什么成员不能有多态.上面有位同学说道 :子类继承了超类的非私有属性和方法,但在Sub中printVal方法被重写了。方法可以被子类重写,但属性却不能重写。 
    用netbeans跟踪一下就知道了,如下: 
    变量                   值   
    sub 
        index           2 
        继承的 
            index       50 他说属性不能重写.----------------------------------------------------------
    那sub 里面的 index=2 ; 不是对super里面的   index=50; 的重写吗?
      

  6.   

    子类对父类里面的成员变量重新赋值 不算一种重写吗? 当然啦,这种问题如果放在机器上一试就试出来了,但是考试呢? 总不能带电脑去吧? 所以既然碰上了这样的问题,不访搞搞清楚.
    否则怎么能算学java 呢?
      

  7.   

    你上面不都写了吗?> 向上转型了吗!~~
    你取得的是Super 里面的index ; 当然=50了!~
    你究竟是2 不明白 还是50不明白啊?
    你要记住: 子可以拿父亲的; 父亲不能拿儿子的还有一点要区分的就是: 方法是放在dataSegment中;
    index 是什么?. 是一个变量; 它分配在 stack中空间  ;
    变量是什么?. 是程序一执行完就消失的; 它不是存在的!~我想你不明白多态的机制:同名的不同方法共存
    你也不明白继承机制: 传递;父类把他的index = 50  传递到了Sub中; 可是你调用的是Super sup = sub; 是个Super类型的Sub对象!~ 这个sup取得它父亲的 index = 50 !
    有什么问题吗????/  你告诉我!!!!!!!!