Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在子类方法中访问超类的受保护构造函数_Java_Constructor - Fatal编程技术网

Java 在子类方法中访问超类的受保护构造函数

Java 在子类方法中访问超类的受保护构造函数,java,constructor,Java,Constructor,我在包p1中有一个类a,它有一个受保护的构造函数。我在另一个包p2中有另一个类B,它是类a的子类。要求在类B的某个方法中访问类a的受保护构造函数,而不更改类a中构造函数的访问修饰符 当我尝试做同样的事情时,我得到一个错误,说构造函数不可见 package p1; public class A { protected A() { System.out.println("Hello"); } } package p2; import p1.A; publi

我在包p1中有一个类a,它有一个受保护的构造函数。我在另一个包p2中有另一个类B,它是类a的子类。要求在类B的某个方法中访问类a的受保护构造函数,而不更改类a中构造函数的访问修饰符

当我尝试做同样的事情时,我得到一个错误,说构造函数不可见

package p1;
public class A 
{
    protected A()
    {
        System.out.println("Hello");
    }
}

package p2;
import p1.A;
public class B extends p1.A
{
    public static void main(String args[])
    {
        new A();  // Error is on this line
    }
}

请注意,我可以使用super在类B的构造函数中访问类A的构造函数,但要求在类B的某些函数中访问它,而不更改类A的构造函数的访问修饰符。

您为类A提供了构造函数,但将其设置为受保护的,因此无法实例化类A。您只能创建类B的实例。您没有隐藏类B的构造函数,它被赋予了默认构造函数。

我不清楚您的问题是什么。B的构造函数是B类的函数,你已经说过你可以用super调用a的构造函数…问题是我不想在B类的构造函数中访问a类的构造函数。我想在B类的函数中访问它。我知道构造函数是类的特殊函数。希望您已经了解B类是A类,因为它是从B类扩展而来的。如果您只是创建新的ClassB,并且ClassB构造函数中的唯一一行是super,那么您基本上只是初始化类ANaveed,super不能用于类B的函数。要求是从类B的某个函数而不是构造函数访问类a的构造函数。希望你现在能更好地理解这个要求@阿卡什尼加规则就是不允许这样。在不同包中使用超类的受保护构造函数的唯一方法是在构造函数中执行super。你可以写一个新的B,这是不对的。可以实例化具有受保护构造函数的类。参考: