为什么在Java中,我可以使用子类引用访问父类的受保护构造函数,而不能使用父类引用?[副本]

s5a0g9ez  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(229)

此问题已在此处有答案

Protected constructor and accessibility(5个答案)
15小时前关门了。
当试图创建父类的对象时,它有一个受保护的构造函数,我尝试使用子类引用,并能够成功创建对象。但是,当使用父类引用时,会导致编译错误。
当试图创建父类的对象时,它有一个受保护的构造函数,我尝试使用子类引用,并能够成功创建对象。但是,当使用父类引用时,会导致编译错误。
这是使用的代码:

package secondPackage;

public class AccessPra {

    protected AccessPra() {
        System.out.println("protected constructor");
    }
}
package firstPackage; 
import secondPackage.*;
public class MainClass extends AccessPra {

    public static void main(String[] args) {

        AccessPra obj1 = new AccessPra();  // Throwing Error
        
        MainClass obj2 = new MainClass();  // This line is working

    }

}
n3h0vuf2

n3h0vuf21#

因为它们在不同的包中,这与访问修饰符有关,如果你把你的类移到同一个包中,它就可以工作了!查看此表以了解访问修饰符:https://www.javatpoint.com/access-modifiers
就像这样:

package firstPackage;
public class AccessPra {

    protected AccessPra() {
        System.out.println("protected constructor");
    }
}

package firstPackage; 
public class MainClass extends AccessPra {

    public static void main(String[] args) {

        AccessPra obj1 = new AccessPra();  // No Error

    }

}

如果你想要不同的包,并使用继承的保护方法,你也可以这样做:

package secondPackage;

public class AccessPra {

    public AccessPra() {
        
    }

    protected void protectedMethod() {
        System.out.println("protected method");
    }
}


package firstPackage;
import secondPackage.*;

public class MainClass extends AccessPra {

    public static void main(String[] args) {

        MainClass obj1 = new MainClass();  // This line is working
        obj1.protectedMethod();
    }

}

正如您所看到的,由于主类扩展了AccessiPra,它从父类继承了方法,因此您可以在它们受到保护时使用它们。
希望有帮助!

相关问题