1.内部类
将类的定义放在另一个类的定义的内部
内部类自动拥有对其外部类所有成员的访问权。
构建内部类对象时需要一个指向其外部类对象的引用。
2、.this与.new
.this:内部类获取外部类对象
.new:在内部类和外部类之外的其他类中生成外部类的内部类对象
public class execrise06 {
public void outerMrthod(){
System.out.println("outerMrthod");
}
public class innerClass{
public void innerMrthod(){
System.out.println("innerMrthod");
}
public execrise06 getOuterObj(){
return
execrise06.this;
}
}
}
//调用代码
execrise06 e6=new execrise06();
execrise06.innerClass e6n=
e6.new innerClass();
e6n.innerMrthod();
e6n.getOuterObj().outerMrthod();
//执行结果
innerMrthod
outerMrthod
3、匿名内部类
匿名内部类不能含有命名构造函数
匿名内部类访问通过其外部类传入的参数,其参数应为final类型。
代码示例:
paramStr在匿名内部类中直接使用,需要设置为final类型。
public class execrise06 {
private String str;
public void outerMrthod(){
System.out.println("outerMrthod");
}
public innerClass outerGetInner
(final String paramStr){
return new innerClass(){
private String str=paramStr;
public void innerMrthod(){
System.out.println("paraminnerMrthod");
System.out.println("param.inner.str="+paramStr);
}
};
}
public class innerClass{
public void innerMrthod(){
System.out.println("innerMrthod");
System.out.println("outer.str="+str);
}
public void innerMrthod2(String str){
System.out.println("innerMrthod2");
System.out.println("param.str="+str);
}
public execrise06 getOuterObj(){
return execrise06.this;
}
}
}
代码特例:因为变量paramStr是传递给匿名内部类的基类,没有在匿名内部类中直接使用,所以没有设置为final类型
public innerClass outerGetInner(String paramStr){
return new innerClass(paramStr){
public void innerMrthod(){
System.out.println("paraminnerMrthod");
System.out.println("param.inner.str="+paramStr);
}
};
}
public class innerClass{
public String paramStr;
innerClass(String paramStr2){
paramStr2=new String("fff");
System.out.println("param.inner.str="+paramStr2);
}
}
4、匿名内部类可以扩展父类的方法,也可以实现接口,但是只能二者取一,不能二者兼顾。
匿名内部类只能实现一个接口,不能实现多个接口。
//IExercise04是一个接口
public Object innerClassobj(){
return new IExercise04 (){
public void area2(){};
public void quilty(){};
};
}
//innerClass是另外一个非匿名的内部类,里边没有方法area2()和quilty()
public Object innerClassobj(){
return new innerClass (){
public void area2(){};
public void quilty(){};
};
}
5、