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
移动到不同的包中,以获取同一语句的错误。与您相比,我没有注意到两者都在同一个包中。与您相比,我没有注意到两者都在同一个包中