java - 嵌套类中私有(private)构造函数的范围

标签 java inheritance constructor superclass

这更像是一个谜题而不是问题。我有以下代码:

public class PrivateBaseConstructor {
    public static class BaseClass {
        private BaseClass() {
        }

    }

    public static class DerivedClass extends BaseClass {
        public DerivedClass() {
            super(); // 1*
        }
    }
}

这里允许在 1* 处调用 super();,即使基类构造函数是 private。如果我们将这些类写成同一个包中的单独类:

BClass.java
public class BClass {
    private BClass() {

    }
}

DClass.java
public class DClass extends BClass {
    public DClass() {
        super(); // 2*
    }

编译器正确地在 2* 处给出错误,因为基类构造函数不可见。

为什么在我的第一个场景中当两个类都在一个类中声明为静态时,编译器不会抛出错误?

最佳答案

如果成员或构造函数被声明为私有(private),则当且仅当它出现在包含成员或构造函数声明的顶级类(第 7.6 节)的主体内时,才允许访问。

http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.6.1

关于java - 嵌套类中私有(private)构造函数的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12542193/

相关文章:

java - 如果放置在 setVisible(true) 之后,JDialog 中的事件处理程序将不起作用

C#泛型继承问题

inheritance - 转到 : can assign struct to an interface, 但不是上层结构

c++ - 将参数隐式传递给基本构造函数 C++

java - 无法启动 Log4j

java - 同时查询多个ID,然后组合成一个Observable

java - 在 Message source Spring 中处理 no such messageexception

python - 从 child 模型中了解 parent 的关系

Javascript:未捕获的类型错误,不是构造函数

c# - 必须是具有公共(public)无参数构造函数的非抽象类型