Java 使用受保护的构造函数实例化类

Java 使用受保护的构造函数实例化类,java,protected,access-modifiers,Java,Protected,Access Modifiers,-->我遗漏了一些关于受保护修改器的信息,但无法理解。 -->到目前为止,我已经读到,一个具有受保护构造函数的类只能由它的子类实例化,而子类也只能在同一个包或不同的包中实例化。那么,为什么上面的代码会给我这个输出:带有受保护构造函数的类 整数值是:20,因为,MyTest和Info两个类都在同一个包中 同一包中的类可以访问受保护的成员,而不会出现任何问题 如果该成员或构造函数被声明为受保护,则访问权限为 仅当下列情况之一为真时才允许: 从包含受保护成员或构造函数所在类的包中访问该成员或构造函数

-->我遗漏了一些关于受保护修改器的信息,但无法理解。 -->到目前为止,我已经读到,一个具有受保护构造函数的类只能由它的子类实例化,而子类也只能在同一个包或不同的包中实例化。那么,为什么上面的代码会给我这个输出:带有受保护构造函数的类
整数值是:20,因为,
MyTest
Info
两个类都在同一个包中

同一包中的类可以访问受保护的成员,而不会出现任何问题

如果该成员或构造函数被声明为受保护,则访问权限为 仅当下列情况之一为真时才允许:

  • 从包含受保护成员或构造函数所在类的包中访问该成员或构造函数
    声明

选中

,因为两个类,
MyTest
Info
在同一个包中

同一包中的类可以访问受保护的成员,而不会出现任何问题

如果该成员或构造函数被声明为受保护,则访问权限为 仅当下列情况之一为真时才允许:

  • 从包含受保护成员或构造函数所在类的包中访问该成员或构造函数
    声明

检查受保护的成员是否可以从
相同包
子类
中访问。它无法访问
世界
(上述除外)

见下表

下表显示了对每个修改器允许的成员的访问

public class MyTest {
    public static void main(String str[]){
        Info i=new Info();
        i.value=20;
        System.out.println("Integer value is :"+i.value);
    }
}
class Info {
    int value;
    protected Info(){
    System.out.println("Class with protected constructor");
    }
}

受保护的
成员可从
相同包
子类
中访问。它无法访问
世界
(上述除外)

见下表

下表显示了对每个修改器允许的成员的访问

public class MyTest {
    public static void main(String str[]){
        Info i=new Info();
        i.value=20;
        System.out.println("Integer value is :"+i.value);
    }
}
class Info {
    int value;
    protected Info(){
    System.out.println("Class with protected constructor");
    }
}

从长远来看,您将帮助您了解任何受保护的内容都只能由其子类访问和操作。这包括方法、变量等。与具有受保护构造函数的类位于同一包中的类仍然“知道”构造函数中的变量。因此,您将收到输出“带受保护构造函数整数值的类为:20”,因为这两个类位于同一个包中。

从长远来看,您将帮助您了解任何受保护的类都只能由其子类访问和操作。这包括方法、变量等。与具有受保护构造函数的类位于同一包中的类仍然“知道”构造函数中的变量。因此,您将收到输出“带受保护构造函数整数值的类为:20”,因为这两个类位于同一个包中。

您的
Info
类和
MyTest
位于同一个包中。并且
protected
修饰符具有包可见性。尝试将
Info
移动到不同的包中,以获取相同语句的错误。您的
Info
类和
MyTest
位于同一个包中。并且
protected
修饰符具有包可见性。尝试将
Info
移动到不同的包中,以获取同一语句的错误。与您相比,我没有注意到两者都在同一个包中。与您相比,我没有注意到两者都在同一个包中