转载:wangbokun http://www.cnblogs.com/bokun-wang/archive/2011/12/02/2272091.html
1.内部类的今本定义
在类内部可定义成员变量与方法,而且在类内部也可以定义另一个类。如果在类Outer的内部定义一个Inner,此时类Inner就成为内部类,而Outer则成为外部类。
内部累可声明成public或private。当内部累声明成public或者private时,对其访问的限制与成员变量和成员方法相同。下面列出了内部累的定义格式:
【内部类的声明格式】
标识符 class 外部类的名称{
//外部类的成员
标识符class内部类的名称{
//内部累的成员
}
}
范例:定义内部类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package
test;
class
Outer {
//定义外部类
private
String info =
"hello word"
;
//定义外部类的素有属性
class
Inner {
//定义内部类
public
void
print() {
//内部类的方法
System.out.println(info);
//直接访问外部类私有属性
}
};
public
void
fun() {
//定义方法
new
Inner().print();
//通过内部累对象调用方法
}
};
public
class
InnerClassDemo01 {
public
static
void
main(String args[]) {
new
Outer().fun();
//调用外部类的fun()方法
}
}
|
结果:
hello word
内部类的唯一好处:就是可以方便的访问外部类中的私有属性。
2.使用static定义内部类
使用static可以声明属性或方法,而使用static也可以声明内部类,用static声明的内部类变成了外部类,但是static声明的内部类不能访问非static的外部类属性,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package
test;
class
Outer {
// 定义外部类
private
static
String info =
"hello word"
;
// 定义外部类的素有属性
static
class
Inner {
// 使用static定义内部类为外部类
public
void
print() {
System.out.println(info);
}
};
};
public
class
InnerClassDemo01 {
public
static
void
main(String args[]) {
new
Outer.Inner().print();
// 访问内部类
}
}
|
3.在外部访问内部类
【在外部访问内部类】
外部类.内部类 内部类对象=外部类实例.new 内部类();
首先要找到外部类的实例化对象之后才可以通过外部类的实例化对像去实例化内部类的对象。
例子:
package
test1;
class
Outer {
private
String info =
"hello word!!!"
;
class
Inner {
public
void
print() {
System.out.println(info);
}
}
}
public
class
InnerClassDemo04 {
public
static
void
main(String args[]) {
Outer out =
new
Outer();
Outer.Inner in = out.
new
Inner();
in.print();
}
}
|
结果:
hello word!!!
4.在方法中定义内部类
也可以在方法中定义一个内部类,但是在方法定义的内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类所访问,则参数前必须加上final关键字。
范例:在方法中定义内部类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package
test2;
class
Outer {
private
String info =
"hello word!!!"
;
public
void
fun(
final
int
temp) {
class
Inner {
public
void
print() {
//方法中定义一个内部类
System.out.println(
"类中的属性:"
+ info);
System.out.println(
"方法中的参数:"
+ temp);
}
}
;
new
Inner().print();
}
}
public
class
InnerClassDemo05 {
public
static
void
main(String args[]) {
new
Outer().fun(
30
);
}
}
|
结果:
类中的属性:hello word!!! 方法中的参数:30