转自:http://www.cnblogs.com/dolphin0520/p/3811445.html
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。
成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Circle { double radius = 0; public Circle(double radius) { this.radius = radius; } class Draw { //内部类 public void drawSahpe() { System.out.println("drawshape"); } }} |
这样看起来,类Draw像是类Circle的一个成员,Circle称为外部类。成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
package 封装类;
public class Outer {
private String name; //外围类成员属性
Outer(String name){ //构造器
this.name=name;
}
public void aaa(){ //外围类成员方法
System.out.println("im outer method");
}
public Outer getOuter(){
System.out.println("getouter()");
return Outer.this; //外部类名+“.”+this 相当于外部类的对象引用
}
class Inner{ //内部类
Inner(){
System.out.println(name); //内部类可以调用外部类的任何权限的成员 包括private
}
}
public static void main(String[] args) {
Outer out=new Outer("xiaoming");
Outer.Inner in=out.new Inner(); // .new 可以创建内部类的对象
out=out.getOuter();
}
}
结果:
xiaoming
getouter()
不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:
|
1
2
|
外部类.this.成员变量外部类.this.成员方法 |
public class Outer {
String name="zhangsan";
public void aaa(){
System.out.println("im outer aaa()");
}
class Inner{
String name="lisi";
public void aaa(){
System.out.println(name);
System.out.println(Outer.this.name);
}
}
public static void main(String[] args) {
Outer out=new Outer();
Outer.Inner in=out.new Inner();
in.aaa();
}
}
结果:
lisi
zhangsan
public class Outer {
String name="zhangsan";
public void aaa(){
Inner in=new Inner();
System.out.println(in.name);
in.aaa();
}
class Inner{ //内部类
String name="lisi";
public void aaa(){
System.out.println("im inner method");
}
}
public static void main(String[] args) {
Outer out=new Outer();
out.aaa();
}
}
原文:http://www.cnblogs.com/shyroke/p/6398884.html