java中私有的属性、静态成员可以被子类继承吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中私有的属性、静态成员可以被子类继承吗?相关的知识,希望对你有一定的参考价值。

静态成员分为静态属性和静态方法,而静态成员是不可以被继承的,因为静态成员是依附于类存在的,它属于类;静态方法在被子类“继承”(实际可以理解为声明了一个跟父类同名的静态方法)后,如果子类将该方法进行了重写,在实例化对象时,如果是子类对象则调用的是子类中该方法的实现方式,如果是父类对象则调用父类中该方法的实现方式。是一种对父类中静态方法的隐藏,但是父类的静态方法一直存在,不会像非静态方法那样,一但发生子类将父类方法重写,不管是子类对象还是父类对象调用该方法都是子类的实现方式;
另一方面,如果子类中静态方法是继承自父类的话,应该是可以用重写@Override进行标记重写的,但在java中不允许在子类中与父类同名同参的静态成员前使用该注解,这也说明了子类中的静态方法不是继承自父类,而是一种声明;
另外所有父类中的非静态成员都可以被子类继承,private等成员访问控制符,只限定子类是否可以调用该成员,不限定是否可以被继承
参考技术A

先说结论

父类的任何成员变量都是会被子类继承下去的。

只是由于private不能被公开访问,所以无法被子类访问,但是实质上是已经继承的。

为了讲明白这个问题,我们来做个测试:

public class Father 

private String name;

private static int sex;

public String age;
//getter and setter

public class Son extends Father

public static void main(String[] args) 

Son son = new Son();
son.age="25";
son.getSex();
son.getAge();


可以看到通过get方法获取父类中的静态和private属性,这就证明了一点继承是所有父类中的属性的,但是private和静态是无法访问的,我们可以通过getter/setter方法去获取其中的值,这算一种中间的方法吧。

私有成员变量可以被子类继承吗

今天看spring源码,不经意间发现了一问题:在一个抽象类中定义了一个私有成员变量。

仔细想想:抽象类不能被实例化的,只能被子类继承。但是自从学java的继承只有,我们就知道,子类不能继承父类的私有成员变量或方法的。

问题:在该抽象方法中定义这个私有变量有什么用呢?或者说这个私有成员变量再什么地方用得到呢?

所以自己做了一个测试如下:

public abstract class Fatherclass {
    private int privatenumber;
    
    public int getPrivatenumber() {
        return privatenumber;
    }
    public void setPrivatenumber(int privatenumber) {
        this.privatenumber = privatenumber;
    }
}


public class Childclass extends Fatherclass{

    public static void main(String[] args) {
        Childclass childclass=new Childclass();
        Childclass1 childclass1=new Childclass1();
        childclass.setPrivatenumber(125);
        System.out.println(childclass.getPrivatenumber());
        System.out.println(childclass1.getPrivatenumber());
    }
}



public class Childclass1 extends Fatherclass {
    
}

运行结果如下:

125
0

 

通过测试,我们发现子类确实继承了父类的私有属性(也可以说是子类拥有一个属性,继承自父类,但是该属性的访问权限暂时不确定),但是我们无法通过子类直接访问该(继承自父类私有属性)的属性。我暂且该这种属性的访问权限起名为fatherprivate(意为继承自父类私有属性)

通过浏览博客,发现一篇博客对上面情况总结的很好:http://blog.csdn.net/frank_jb/article/details/42739785

 

以上是关于java中私有的属性、静态成员可以被子类继承吗?的主要内容,如果未能解决你的问题,请参考以下文章

私有成员变量可以被子类继承吗

java static 能继承吗

子类将继承父类所有的方法和属性吗?为啥?

java中,子类能调用父类中所有方法、对象吗?是不是父类也能调用子类所有……?

JAVA中私有属性private能被子类继承吗

JAVA中,子类将继承父类的所有属性和方法吗?为啥?