Java类子类重复定义方法或者成员变量可见性问题

一般在子类中经常会用到方法的重写,成员变量的“重写”之前都没有考虑过。今天遇到重写了一个成员变量,直接编译报错了,实例代码如下:
先增加个儿子类:

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

和成员变量不同的是,重写方法是不能够降低可见性的!所以在重写的时候就编译报错了。

你可能感兴趣的:(Java类子类重复定义方法或者成员变量可见性问题)