继承出现的问题
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.
------解决方案--------------------