class Man{
     String character = new String("男性本质特征");
     public void showCharacter(){
            System.out.println("男性表现特征");
     }
}
 
class Woman extends Man{
       String character = new String("女性本质特征");
       public void showCharacter(){
              System.out.println("女性表现特征");
       }
       
}
public class Renyao{
      public static void main(String[] args){
       Man people = new Woman();
       System.out.println(people.character);
       people.showCharacter();
}
}
结果为什么是: 
男性本质特征 
女性表现特征 

解决方案 »

  1.   

    !同意楼上的观点!
    方法是后绑定的(除了static和final),而变量不是
      

  2.   

    java在继承上, 域的重复声明不会覆盖父类, 而方法的重复声明是必定覆盖父类;(和.net不同~  .net在方法覆盖上有两种选择, 一种是覆盖, 一种是新生)
      

  3.   

    你子类继承了超类MAN
    但实力化类型为超类的MAN,则是超类MAN中的变量以及方法,当MAN中方法已经被WOMAN覆盖,所以结果为
    变量为超类的变量
    方法为子类的方法
      

  4.   

    这是JAVA中典型的继承和引用上溯造型的问题.
    WOMAN继承了MAN,MAN man = new WOMAN()的意思是
    MAN的对象引用了子类WOMAN的实例,这就是上溯造型.
    当父类的对象引用了子类的实例后,JAVA规定,如果成员变量
    出现隐藏,那么引用的就是父类的变量,如果成员方法出现重构,
    那么引用的就是子类的方法.以上意见仅供参考.
      

  5.   

    Man people = new Woman();是上塑阿
    之后如果调用子父类都有的方法 那么实际上是调用子类的方法 毕竟子类的方法比父类的要新
    这是java的规范阿
    但是people毕竟是 man类型的所以他的属性还是man的
      

  6.   

    恩我觉得还是有用的阿 比如你已经写好了很多actionform但是要统一增加 方法或者属性 完全可以写一个父类 然后低下继承萨 少些很多代码了阿
    当然这是最浅显的应用了
      

  7.   

    这应该是overload和overriding的问题~