无法在同一包的不同类中访问具有默认access关键字的java变量
当我从包com.access.test
中的class A
到同一个包中的class B
访问默认(前面没有公共或私有等访问修饰符)访问变量String s = "hello"
时,我无法获取class B
中的变量s
。
IDE显示变量s
从未定义过
但是为什么Java说默认的访问变量可以在同一个包中访问呢。正如我们所知,通过扩展类,可以从不同的包访问受保护的变量。
因此,默认变量应该是access,甚至不需要进行class A
的对象实例化(A a = new A()
然后a.s
)。
请解释一下
# 1 楼答案
您应该能够通过A的实例在B中访问它
所以你可以这样做:
如果将字符串
a
定义为静态,则可以通过B中的类名访问它,如:# 2 楼答案
考虑以下两个类
及
我认为你可能混淆了可访问性和名称空间。每个类定义都创建自己的名称空间。这使您能够在单独的类中创建名称相同的实例字段,这些类仍然单独封装在每个类中
如果希望访问在同一个包中但在另一个类中具有默认访问权限的实例字段,您必须用类实例限定该字段名(以便编译器知道该字段的位置;如果没有质量字段名称,则假定您只希望在当前作用域中考虑字段名)。例如,要从
ClassB
访问myA
,您可以编写:# 3 楼答案
直接在类外部访问类A的变量,即使在同一个包中也是不可能的
简单想想,B类在同一个包中,但不是继承a类,对吧
所以
String s;
不是class B
的一部分。那么如何直接访问它呢。您必须在class B
中创建一个class A
对象,然后String s
将可访问只要学习Java中访问修饰符的基本知识,您就会知道,即使是类的公共变量,如果没有对象,也无法在类之外访问
例如:
在本例中,
x
是公共的,但如果没有类Test5
的对象,仍然无法访问,即使这两个类都在同一个程序文件中默认修饰符也是如此
希望这有帮助