public class Parent { protected String value = "123";
public String getValue() {
return value;
}
}public class Child extends Parent { protected String value = "456";
/**
 * @param args
 */
public static void main(String[] args) { System.out.print(new Child().getValue());
}}求输出。答案是“123”,求高手指教。

解决方案 »

  1.   

    protected String value = "456";
    、去掉就是123了或值改成123也行
      

  2.   

    class Parent { protected String value = "123";
    public String getValue() {
    return value;
    }
    }public class Child extends Parent { protected String value = "456";
    /**
     * @param args
     */
      public String getValue() {
    return value;
    }
    public static void main(String[] args) { System.out.print(new Child().getValue());
    }}
    因为没有复写方法。所以用的superclass的method 当然读的是superclass的member
      

  3.   

    因为Child类继续了Parent类啊,Parent类的中getValue()方法反回的值是Parent类中value的值啊,所以答案是"123"。
      

  4.   

    经过实践证明syoumei是正解的!!难道Child实例里面同时有2个value值?
      

  5.   

    Child实例里面是同时有2个value, 一个父类的, 一个子类的, 因为是调用父类的getValue,所以是输出父类的value
      

  6.   

    可是是new 的Child啊?新建对象调用的还是父类的方法吗
      

  7.   

    父类里的东西也可以理解成你自己的东西。也就是说在你的程序里面有两个value,一个是123,另一个是456。而你现在要输出的是父类里面的那个value,所以就是123。原因是你在输出语句中使用的是getValue();方法。而这个方法就是父类里面的方法。他的返回值是父类里面定义的value,也就是123。不知道我这样说LZ是不是能明白。
      

  8.   

    在子类中没有覆盖父类的方法,所以调用的是父类的方法
    在子类中可定义一个同名的方法,内容不同的方法叫覆盖
    调用时要在引用时指明引用的是父类还是子诶的方法
    class Parent {int x=10;  int y=31;
    public void printdata() 
    {
    System.out.println("x="+x+"y="+y);
    }
    }public class Child extends Parent 
    {
    int z=35;
     public void printdata() 
    {
    System.out.println("z="+z);
    }
    public static void main(String[] args) 
    {
    parent p1=new parent();
    parent p2=new parent();
    p1.printdata();
    p2.printdata();
    }
    }