哪些成员不是在子类中继承的?

时间:2014-04-16 08:05:36

标签: java class inheritance subclass

我正在尝试回答以下问题:

  

子类不会继承父类的某些成员。三个名字       这样的成员。

我知道私有成员不会继承到子类,并且默认成员不会在包外继承。任何人都可以完成答案吗?

编辑: - 我相信静态成员是根据以下演示继承的

public class sup {
    public static void main(String agr[]){
    }

    protected static int staticInt=0;
    protected final int finalInt=3;
    protected int protectedInt=0;
    public String publicString = "";
    private int privateInt=8;
}

class sub extends sup{
    public void del(){
        staticInt=1;
        staticInt=finalInt;
    }
}

5 个答案:

答案 0 :(得分:6)

来自JLS for Class Member

  

构造函数,静态初始值设定项和实例初始值设定项不是成员,因此不会继承。

答案 1 :(得分:2)

来自Inheritance的Oracle Java文档:

  

子类继承所有成员(字段,方法和嵌套   来自其超类的类)。 构造函数不是成员,所以他们   不是由子类继承,而是超类的构造函数   可以从子类

调用

所以我认为你在这里缺少施工人员。 静态方法和字段也不会被继承,当它们在子类中重写时,它们只是重用签名和hide父类中方法/字段的实现。

对于静态字段和方法的继承,请参阅由Duncan提供的此discussion,以及这篇精彩的教程Overriding vs Hiding

答案 2 :(得分:1)

构造函数和静态初始化程序以及实例初始值设定项。

答案 3 :(得分:1)

无 - 以条款用法为例进行回答。

上面回答了子类中可见的成员。 成员是字段和方法(每个都有自己的命名空间)。

继承作为子实例的一部分,是另一个问题:也是不可见的私有成员"继承"因此。 静态成员是类实例的一部分,不会被继承(也不能被覆盖)。所有 final 方法都无法覆盖。

Arguable构造函数不是继承的;您必须在新的子构造函数中再次定义相同的签名。

类中的其他声明可以是类定义。关键字static具有不同的含义,可以在可见性/继承上做出明显的陈述。例如,对于具有<outer-class>.this(递归概念)的非静态内部类。

答案 4 :(得分:0)

您无法继承私有字段和构造函数。 你不能继承构造函数,因为它们不是超类的成员。你可以从它的子类中调用一个超类构造函数。并且您还可以通过公共或受保护的超级类方法访问超类的私有成员。