一般在子类中经常会用到方法的重写,成员变量的“重写”之前都没有考虑过。今天遇到重写了一个成员变量,直接编译报错了,实例代码如下:
先增加个儿子类:
public abstract class Child {
protected String name="child";
}
然后增加个自己:
public abstract class I extends Child{
}
最后增加一个爸爸:
public class Dad extends I{
public String show() {
return name;
}
}
目前这样写,在Dad的show方法里调用的是Child中的name,由于是protected类型所以是可以访问到的:
成员变量可见性图.png
这时如果在I类中增加了一个同样名称的成员变量,但是其为private类型,就会编译报错:
public abstract class I extends Child{
private String name="I";
}
image.png
可见如果最近的一层重写了成员变量的话,就会取最近一层的成员变量,如果可见性不满足的话,就会编译报错,而不是取下一层的成员变量。
同样的我们对方法进行测试:
image.png
和成员变量不同的是,重写方法是不能够降低可见性的!所以在重写的时候就编译报错了。