Java 限定名和字段访问表达式之间有什么区别?
从: 设C为声明受保护成员的类。访问权限是 仅允许在C的子类S的主体内使用 此外,如果Id表示实例字段或实例方法,则: 如果通过限定名称Q.Id进行访问,其中Q是 ExpressionName,则仅当类型为 表达式Q的子类是S或S的子类 如果通过字段访问表达式E.Id进行访问,其中E是 主表达式,或通过方法调用表达式E.Id(…), 其中E是主表达式,则如果且 仅当E的类型是S或S的子类时Java 限定名和字段访问表达式之间有什么区别?,java,jls,Java,Jls,从: 设C为声明受保护成员的类。访问权限是 仅允许在C的子类S的主体内使用 此外,如果Id表示实例字段或实例方法,则: 如果通过限定名称Q.Id进行访问,其中Q是 ExpressionName,则仅当类型为 表达式Q的子类是S或S的子类 如果通过字段访问表达式E.Id进行访问,其中E是 主表达式,或通过方法调用表达式E.Id(…), 其中E是主表达式,则如果且 仅当E的类型是S或S的子类时 限定名和字段访问表达式之间有什么区别?限定名在类名方面有意义(从静态角度考虑)。其中,as字段访问表达式类
限定名和字段访问表达式之间有什么区别?
限定名
在类名方面有意义(从静态角度考虑)。其中,as字段访问表达式类似于在类的特定对象(包括方法名)的引用范围内指定完全限定名
例如:
public class A
{
public static void method1()
{//does something
}
}
public class B
{
public int dummy;
public void hello()
{
System.out.println("Hello!");
}
}
public class Main
{
public static void main(String[] args)
{
B b = new B();
b.dummy=1;
b.hello();
}
}
在上面的课程中,如果我们说
A.method1()
它更像是一个限定名称,其中
b.hello();
b.dummy
更像是字段访问表达式。如果表达式名称的形式为Q.Id,则Q已被分类为包名称、类型名称或表达式名称
字段访问表达式的含义是使用与限定名称相同的规则确定的,但受到表达式不能表示包、类类型或接口类型这一事实的限制
在oracle的网站上找到上述文本
简单来说:
限定名称是指在声明中携带父级信息的名称。
例如Pack1.Pack2.Pack3.Class1和Pack1.Pack2.Pack4.Class2
在Pack4中,我们可以通过以下任一方式访问Class1
Pack3.Class1或Pack2.Pack3.Class1或Pack1.Pack2.Pack3.Class1,
其中最后一个将是完全限定名
字段访问表达式是限定名称的子类型,但正如名称所述,它用于访问字段
所以,限定名可以引用包、类、接口,但不能引用字段,而字段访问表达式只能引用字段
参考: