我已经开始准备自己参加OCJP7考试,我发现这一章看起来很复杂.
假设我有这段代码:
class Outer1{
interface InnerInterface{
String x = "test";
}
class InnerClass{
String x = "test";
}
}
class Outer2{
static interface NestedInterface{
String x = "test";
}
static class NestedClass{
String x = "test";
}
}
class Main{
public static void main(String [] args){
String s1 = Outer1.InnerInterface.x;
String s2 = new Outer1().new InnerClass().x;
String s3 = Outer2.NestedInterface.x;
String s4 = new Outer2.NestedClass().x;
}
}
Run Code Online (Sandbox Code Playgroud)
你能告诉我,为什么我们可以访问Outer1.InnerInterface.x,并Outer2.NestedInterface.x以同样的方式?内部接口默认是静态的?我正试图建立一些联系,以使它们更清晰.
Jos*_*ica 11
嵌套类是其封闭类的成员.非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有.静态嵌套类无权访问封闭类的其他成员.作为OuterClass的成员,可以将嵌套类声明为private,public,protected或package private.(回想一下,外部类只能声明为public或package private.)
接口无法实例化.因此,它们只有静态才有意义.将嵌套接口声明为静态是多余的.
此外,练习使用令人困惑的接口名称.
这两个InnerClass和NestedClass嵌套类.但只是InnerClass一个内部类,因为"内部类"意味着"非静态嵌套类".
类似地,人们可能期望InnerInterface是"内部接口",意思是"非静态嵌套接口"; 但这样的事情不存在.这两个InnerInterface和NestedInterface嵌套接口,其中没有一个是内部接口.
是的,嵌套接口是隐式的static. JLS第8.5.1节规定:
成员接口是隐式的
static(第9.1.1节).允许声明成员接口冗余地指定static修饰符.
正因为如此,您可以访问x通过嵌套的接口以同样的方式,通过外部类Outer1和Outer2-两个嵌套的接口,InnerInterface并且NestedInterface是static.
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |