父类访问子类Java的受保护成员
我有以下代码,我认为Oracle的教程并没有完全解释这些代码父类访问子类Java的受保护成员,java,subclass,protected,Java,Subclass,Protected,我有以下代码,我认为Oracle的教程并没有完全解释这些代码 package visibilidad; import otropaquete.*; public class ejemplo2 extends Test { protected int prot = 4; } package otropaquete; import visibilidad.*; public class Test { public void metodopublico() {
package visibilidad;
import otropaquete.*;
public class ejemplo2 extends Test {
protected int prot = 4;
}
package otropaquete;
import visibilidad.*;
public class Test {
public void metodopublico() {
ejemplo2 a = new ejemplo2();
System.out.println(a.prot);
Hija b = new Hija();
System.out.println(b.prot);
}
}
class Hija extends Test {
protected int prot = 3;
}
基本上,我要做的是从父类访问子类的受保护成员。有趣的是,当子类在另一个包中定义并且
如果子类在同一个类中定义,则可以完美运行
我想知道标准中是否考虑了这种行为。受保护的
修改器也允许从同一软件包访问。请参阅。受保护的修改器也允许从同一软件包进行访问。请参阅。在Java
中有4种不同的访问修饰符:
(无修改器)-对包可见
(专用)-仅对类可见
(公共)-世界可见
(受保护)-对包和所有子类可见
这是一个
使用protected
修饰符意味着只有该包的其他类和子类可以访问字段/方法。在您的情况下,来自同一个包的类工作正常,而来自不同包的类抛出编译时错误,这正是应该发生的情况。在Java
中,有4种不同的访问修饰符:
(无修改器)-对包可见
(专用)-仅对类可见
(公共)-世界可见
(受保护)-对包和所有子类可见
这是一个
使用protected
修饰符意味着只有该包的其他类和子类可以访问字段/方法。在您的情况下,来自同一个包的类工作正常,来自不同包的类抛出编译时错误,这正是应该发生的。非常明确:受保护的
字段可以在类、包和子类级别访问。由于父类既不是子类,也不在同一个包中,因此该字段不可访问,并且您将得到一个编译错误
Oracle文档中的访问级别表:
Access Levels
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
非常明确:受保护的
字段可以在类、包和子类级别访问。由于父类既不是子类,也不在同一个包中,因此该字段不可访问,并且您将得到一个编译错误
Oracle文档中的访问级别表:
Access Levels
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
如果您遇到编译时错误,这显然是标准的,不是吗?是的,但是编译时错误读起来像“prot在ejbemplo2中具有受保护的访问”一样通用。我的意思是,如果考虑到这一点或只是将其留空,那么受保护的变量只能从同一个包中访问。对包和所有子类可见(受保护)。如果出现编译时错误,这显然是标准的,否?是,但编译时错误读作“prot在EJMPO2中具有受保护的访问权限”这样的泛型。我的意思是,如果考虑到这一点,或者只是将其留空,那么受保护的变量只能从同一个包中访问。对包和所有子类可见(受保护)。