黑马程序员------内部类

  内部类
  1.成员内部类
  内部类可以随意使用外部类的成员方法和成员变量,哪怕是这些成员被修饰为private。
  外部类不能使用内部类的成员。
  内部类对象依赖外部类对象创建
  class OuterClass{
  innerClass inner=new InnerClass();
  public void ouf(){
  inner.inf();
  }
  class InnerClass{
  InnerClass(){}
  int i=0;
  public void inf(){
  System.out.println("内部类方法");
  }
  }
  public InnerClass getInstance(){
  inner.y=9;
  return new InnerClass();
  }
  
  public static void main(String args[]){
  OuterClass outer=new OuterClass();
  outer.InnerClass inner=outer.getInstance();
  //outer.InnerClass inner=outer.new InnerClass();
  }
  }
  如果在外部类中定义的成员变量与内部类中的成员变量名称相同,可以用this关键字。
  class Outer{
  int i=0;
  class Inner{
  int i=0;
  public void print(int i){
  i++; //调用的形参i
  this.i++; //调用的内部类i
  Outer.this.i++; //调用的外部类i
  }
  }
  }
  
  2.局部内部类
  内部类不仅可以在类中进行定义,也可以在类的局部位置定义,比如方法中。
  interface OuterInterface{}
  
  class Outer{
  public OuterInterface doit(final String x){
  class Inner implements OuterInterface{
  Inner(String s){
  s=x;
  System.out.println(s);
  }
  }
  return new Inner("doit");
  }
  }
  内部类是doit方法的一部分,只能在方法内部访问内部类,但是该内部类可以访问方法的常量
  以及外部类的所有成员。
  
  3.匿名内部类
  将上面代码改写:
  class Outer{
  public OuterInterface doit(){
  return new OuterInterface(){
  private i=0;
  public int getValue(){
  return i;
  }
  };
  }
  }
  
  4.静态内部类
  在内部类前添加static修饰符,该内部类就变为静态内部类。
  静态内部类中可以声明静态成员,非静态内部类中不可以声明静态成员。
  如果创建静态内部类的对象不需要外部类的对象引用。
  不能从静态内部类的对象中访问非静态外部类的对象。
  
  class Outer{
  int i=0;
  static int j=9;
  static class Inner{
  void doit(){
  System.out.println(j);
  }
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值