日期:2014-05-20  浏览次数:20704 次

继承出现的问题
class B 
{
  String name = "我没变!";
   
  public String getN()
  {
  return this.name;
  }
}

public class Hello extends B
{
String name ="dddd!";
  public static void main(String [] args)
  {
  Hello c = new Hello();
  B b = new B();
  c.name="aa";
   
  System.out.println(b.getN());
  System.out.println(c.getN());
  System.out.println(c.name);
  }
}

结果:
我没变!
我没变!
aa

问题:为什么c.getN()与b.getN()的返回值一样,反而与c.name不一样,c.name和c.getN()的返回值应该一样呀?


------解决方案--------------------
你的hello继承自B,在hello再写啦一个string name;这叫覆盖。也可以理解为hello中的name把B中的name隐藏啦,需要特殊的方法才能调用,两个name是不同的存在。而你的B中的getN()方法没有在hello中被重写,所以getN()返回的是父类中的name的值。这就是为什么第一个输出是:我没变。第二个输出就不用解释啦。第三个输出,因为c.name这条语句是调用子类中的name,父类的name的值并没有改变。所以第三条语句输出aa.
------解决方案--------------------
探讨
引用:
你的hello继承自B,在hello再写啦一个string name;这叫覆盖。也可以理解为hello中的name把B中的name隐藏啦,需要特殊的方法才能调用,两个name是不同的存在。而你的B中的getN()方法没有在hello中被重写,所以getN()返回的是父类中的name的值。这就是为什么第一个输出是:我没变。第二个输出就不用解释啦。第三……