C#静态嵌套类 | C#普通嵌套类 | Java静态内部类 | Java普通内部类 | |
---|---|---|---|---|
static nested class | nested class | static inner class | inner class | |
代码 | class A{static class B{}} | class A{class B{}} | class A{static class B{}} | class A{class B{} } |
B关联A的层次 | 类 | 类 | 类 | 实例对象 |
B访问A的private成员 | ✔️ | ✔️ | ✔️ | ✔️ |
A访问B的private成员 | ✖️ | ✖️ | ✔️ | ✔️ |
B可声明静态成员 | ✔️ | ✔️ | ✔️ | ✖️,编译时常量除外 |
B可声明实例成员 | ✖️ | ✔️ | ✔️ | ✔️ |
A访问B的静态成员 | B.xxx | B.xxx | B.xxx | new B().xxx |
A访问B的实例成员 | ✖️ | new B().xxx | new B().xxx | new B().xxx |
B访问A的静态成员 | A.xxx | A.xxx | A.xxx(或直接xxx) | A.xxx(或直接xxx) |
B访问A的实例成员 | new A().xxx | new A().xxx | new A().xxx | A.this.xxx(或直接xxx) |
A外部访问B的静态成员 | A.B.xxx | A.B.xxx | A.B.xxx | new A().new B().xxx |
A外部访问B的实例成员 | ✖️ | new A.B().xxx | new A.B().xxx | new A().new B().xxx |
总结:
- C#的嵌套类都是与外部类在类层次上关联的,没有Java中的与外部类的实例关联的普通内部类。
- C#的普通嵌套类基本相当于Java的静态内部类,除了一些访问上的细微差别。