转自: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