gpt4 book ai didi

Java 使用包私有(private)构造函数继承公共(public)类

转载 作者:行者123 更新时间:2023-11-30 02:40:08 26 4
gpt4 key购买 nike

我来自 C++ 背景,我刚刚在 Java 中使用访问修饰符,我决定尝试一些代码,现在我收到一个错误:

YouArePublic() is not public in YouArePublic; cannot be accessed from outside package

我不知道为什么。我知道 YouArePublic 类中的构造函数是默认的,因此我无法在其自己的包之外的任何其他类中创建它的对象,但我并没有真正在这里创建一个对象。

编译器是否隐式尝试创建 Tester 类的对象,从而调用其默认的无参数构造函数,然后使用 super() 调用其父类(super class) YouArePublic 的构造函数?但 main() 是静态的,因此不需要创建该类的实例来调用它。

我不确定这里发生了什么,真的需要一些帮助。

package one;

import two.YouArePublic;

class Tester extends YouArePublic { // Inheritance in different package
public static void main(String args[]) {

Tester ot = new Tester();
ot.displayMessage();

}
}


package two;

public class YouArePublic {
String message = "You are public in package TWO!";

YouArePublic() { super(); }


public void displayMessage() {
System.out.println(message);
}
}

最佳答案

问题是类本身不是公共(public)的,因此,正如消息所述,无法从包外部访问。只要将其公开,就应该没问题(正如您所指出的,将创建一个默认的公共(public)构造函数):

public class Tester extends YouArePublic {

关于Java 使用包私有(private)构造函数继承公共(public)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41999596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com