为什么 Java 构造函数必须是 public 或 protected 才能将类扩展到其包之​​外?

2024-01-08

以下是我的ProtectedConstructor.java源代码:

package protectCon;

public class ProtectedConstructor{
    public int nothing;
    ProtectedConstructor(){
        nothing = 0;
    }
}

以下是UsingProtectedCon.java source:

package other;

import protectcon.ProtectedConstructor;

public class UsingProtectedCon extends ProtectedConstructor{   //**Line 4**
    public static void main(String... a) {  
    }
}

当我编译时UsingProtectedCon.java,我在上面显示的第 4 行出现错误。它说 ProtectedConstructor() 不是 public ;所以无法在包外访问。

但是,由于我的课程是公共的,我是否应该能够将其扩展到包之外。无论如何,我不会创建它的任何实例。

现在,如果我创建以下构造函数ProtectedConstructor类为public or protected然后代码编译良好,没有错误。

那么为什么构造函数也必须是public or protected,而不只是有默认访问权限?


如果你想在其包之外扩展一个类,它必须有一个构造函数public or protected因为在 Java 中,每个构造函数都必须调用其超类的构造函数。

正因为如此,有一个隐含的super()调用每个没有的构造函数this()或显式调用super()作为其第一个声明。如果你根本不指定构造函数,Java 将添加一个默认的无参数构造函数,因此实际上你的代码如下所示:

public class UsingProtectedCon extends ProtectedConstructor {
    public UsingProtectedCon() {
        super();
    }

    public static void main(String... a) {   
    }
}

换句话说,您的代码无法编译,因为调用super()在默认构造函数中无法解析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Java 构造函数必须是 public 或 protected 才能将类扩展到其包之​​外? 的相关文章

随机推荐