package com.ldns;
import static java.lang.System.out;
class SuperClass {
public String var = "I'm in SuperClass";
public  void ptintMes(){
out.println(var);
}
}class SubClass extends SuperClass {
public String var = "I'm in SubClass";
public void ptintMes(){
out.println(var);
}
}public class StaticDTBDTest {
public static void main(String[] args) {

SuperClass superRef =new SubClass( );
superRef.ptintMes();
System.out.println(superRef.var);
}
}
执行结果:
I'm in SubClass
I'm in SuperClass是不是和你们想的一样?问什么呢?
求解!!!

解决方案 »

  1.   

    http://topic.csdn.net/u/20101123/11/23d889e5-e598-402c-b7b7-16adab021a84.html
      

  2.   

    SuperClass   superRef   =new   SubClass(   ); 
    这里没有问题吗?
      

  3.   

    SuperClass   superRef   =new   SubClass(   );
    为什么superRef   调用的方法是子类重写的方法,用的成员变量不是子类同名的成员变量呢?
    希望高手从内存,对象构造上指点小弟的迷茫!!
      

  4.   


    这里没有问题 的.标准的多态写法. 子类的对象一定也是基类的对象! java中方法是默认多态的.
    所以主函数中下面
    superRef.ptintMes(); 
    这句自动多态执行的是子类的方法,故打印
    I 'm   in   SubClass System.out.println(superRef.var); 
    在java中类的数据成员,是不参与多态的
    所以superRef.var代表的是基类中的数据成员war而不是子类的中
    故结果是I 'm   in   SuperClass建议楼主看一下thinking in java 3 或者thinking in java4 讲得很清楚的
      

  5.   

    多态是什么呢?多态就是方法的迟绑定,具体的来说,就是在程序运行的时候根据对象的实际类型来调用相应的方法。通常都是用父类引用指向子类对象来实现多态的!所以superRef.ptintMes(); 中的ptintMes方法是SubClass的方法。因此打印结果是I 'm   in   SubClass 。
    但是多态只是针对方法的,并没有说属性,superRef的类型是SuperClass,所以访问属性的时候,访问的是自身的var。因此后面一个就打印的是I 'm   in   SuperClass。汗,楼主的结贴率!
      

  6.   

    这里没有问题 的.标准的多态写法. 子类的对象一定也是基类的对象! java中方法是默认多态的.