10、内部类

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、









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值