关于子类是否可以继承父类静态或私有方法与属性的看法

一、私有方法与属性

我们调用一个自定义类的非静态属性或方法,是采用创建一个实例对象,用实例对象+.来调用。例如如调用孩子这个类的实例的名字(属性)和说话行为(方法)。

Child child = new Child();
child.name;
child.say();

如果没有这个属性或方法那么会报错“Cannot resolve symbol ‘xxx’ ”。但是如果child调用仅在父类Father中定义的私有的name以及say()方法,则报错“ ‘xxx’ has private access in 'Father '”。这是从报错角度分析。
再从继承中的构造方法进行分析,在实例化一个子类对象时,子类构造函数会执行super(),相当于构造了一个父对象。也就是实例化一个子类对象,该实例也会包含一个父类的实例对象。这样子类就默认拥有父类的方法。既然是通过包含实例化一个父类来达到继承目的,那么理论上继承的方法与属性就已经包含了私有的成员变量及方法。只是不能直接访问而已。
所以我认为私有方法与属性,子类是能继承的。
对于子类实现访问或修改父类私有成员变量,可以在父类中定义非私有方法区访问私有方法、修改私有变量,使得子类访问。

public static void main(String[] args) {
        Child child = new Child();
        String get_name = child.getName();
        System.out.println(get_name);
    }
}
class Father{
    private String name = "周旋";
    private void printName(){
        System.out.println("该方法为父类打印:"+this.name);
    }
    public String getName(){
        printName();
        return this.name;
    }
}
class Child extends Father{

}

输出结果为:

该方法为父类打印:周旋
周旋

二、静态方法与属性

对于静态方法与属性是否可被继承,查找了很多文章,大家说法不一,有一些认为静态方法与属性跟属于类,且存放在静态区,是不可被继承的,只是子类可以访问。支持静态方法可以被继承的则是直接用代码来证实。
个人认为静态方法是可以被继承的,子类继承父类,继承是面向对象最显著的一个特性。“继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。”其实简单来说,就是父类的属性,子类可拥有,父类的方法子类也能拥有。
我们调用一个自定义类的静态属性或方法,可以直接用类名或用实例对象+.来调用。那我们直接上代码验证。

//父类
class MethodOverrideFather {
    public static String name_static="父类";
        public static void printTest(){
        System.out.println("父类打印");
    }
  
}

//子类
class MethodOverrideChild extends MethodOverrideFather{
    public void print(){
        System.out.println(this.name_static);
    }
        public void printTestC(){
        this.printTest();
    }
}

public class MethodOverrideTest {
    public static void main(String[] args) {
        MethodOverrideChild methodOverrideChildA = new MethodOverrideChild();
        methodOverrideChildA.print();
        methodOverrideChildA.printTestC();
    }
}

输出结果

父类
父类打印

在父类中定义了静态属性name_static,定义了静态方法printTest()。在子类的中打印name_static用了this.name_static而不是super.name_static,方法调用也是用的this,最后的输出结果足以证明,子类也是继承了父类的静态方法与属性。那么静态属性与方法是可以被继承的。