Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 8cc8fe4

Browse filesBrowse files
committed
ADD: java-inner-class-and-static-nested-class.md
1 parent 1d7bcfa commit 8cc8fe4
Copy full SHA for 8cc8fe4

File tree

Expand file treeCollapse file tree

1 file changed

+44
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+44
-0
lines changed
+44Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
## Java内部类和嵌套静态类
2+
3+
### 问题
4+
Java 当中的内部类和静态嵌套类有什么主要区别? 在这两者中有什么设计或者实现么?
5+
6+
### 回答
7+
嵌套类分为两类: 静态和非静态. 用`static`装饰的嵌套类叫做静态类, 非静态的嵌套类叫做内部类.
8+
9+
静态嵌套类使用外围类名来访问:
10+
```java
11+
OuterClass.StaticNestedClass
12+
```
13+
例如, 实例化一个静态嵌套类的对象就要使用这种语法:
14+
```java
15+
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
16+
```
17+
18+
内部类对象的存在需要依靠一个外部类的对象. 看看下面的类:
19+
```java
20+
class OuterClass {
21+
...
22+
class InnerClass {
23+
...
24+
}
25+
}
26+
```
27+
内部类对象只有当外部类对象存在时才有效, 并且可以直接访问他的包裹对象(外部类对象)的方法以及成员.
28+
29+
因此, 要实例化一个内部类对象, 必须先实例化外部类对象. 然后用这种语法来创建内部类对象:
30+
```java
31+
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
32+
```
33+
参考: [Java Tutorial - Nested Classes](http://download.oracle.com/javase/tutorial/java/javaOO/nested.html)
34+
35+
提醒一下, 还有一种不用外部类对象来创建内部类对象的方法: [inner class without an enclosing ](http://stackoverflow.com/questions/20468856/is-it-true-that-every-inner-class-requires-an-enclosing-instance)
36+
```java
37+
class A {
38+
int t() { return 1; }
39+
static A a = new A() { int t() { return 2; } };
40+
}
41+
```
42+
在这里, `new A() { ... }`是一个定义在静态上下文的内部类对象, 并没有一个外围对象.
43+
44+
stackoverflow链接: [Java inner class and static nested class](http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.