S1
S1
S2
S2
S1
S2对java类的理解,父类与子类的关系。

解决方案 »

  1.   

    我想知道在s1=s2后
    s1与s2应该都指向同一个对象吧
    这时s1.s为什么是“S1”呢
      

  2.   

    notice declaration :S1 s1
    if the code is : (S2) s1=s2;
    then print s2
      

  3.   

    GJA106(中文字符)的答案正确。
    重点在于:类的继承中,域的隐藏和方法的覆盖
    域的隐藏:父类的域在子类对象中任占有自己的独立内存空间;
    方法的覆盖:父类方法在子类中不复存在
    所以:
        s1 = s2;    //s1,s2指向同一个对象,该对象中同时存在两个s
        System.out.println(s1.s);  //s1调用的是类S1的域s
        System.out.println(s1.getS()); //S2的对象只有一个getS()可调用,
                             //并且子类自己的方法操作的是子类自己的域
    会有这样的结果:
      S1
      S2
      

  4.   

    考查的重点在于:s1 = s2;
    原始数据类型在JAVA中是引用,也就是说它不会被改变,这一点同C语言。
    而对象则对应的是同一个区域,所以它必定会被改变,主要是对"=" 和"clone()"的区别。
    所以答案为
    S1
    S1
    S2
    S2
    S1
    S2
      

  5.   

    各位Java大虾:问你们一个问题:
     在C#和Delphi中好象不存在这种情况哦?
     应该是这种结果:
       S1,S1,S2,S2,S2,S2
      对吗?(我是指在C#和Delphi中!)
      请大家讨论!谢谢1
      

  6.   

    那么在s1=s2之后,有没有可能在s1中不用getS()这一方法而直接访问到类S2中的那个s呢?
    就象在子类中可以用super的办法得得到父类中重名的数据成员。