java编程之内部类(一)

第一部分 内部类形式

1、基本形式
a.以类形式存在:


 class Outer{ 
     ......
     class Inner{
        ......
     }
 }

b.以字段形式存在:
在内部类前加上修饰词private等,当作类的字段使用

2、在方法和任意作用域中定义内部类
a.快速创建被实现的接口的接口引用

interface InClass{....}
class Outer{
   public  InClass getInClass(){
        class Inner implements InClass{
       //实现接口中定义的方法
        ......
         }
         return new Inner( );
    }
 }

b.java允许在任意作用域内创建一个类来解决当前问题

3、匿名内部类
a.默认构造器生成匿名内部类对象

    //匿名内部类的基本实现
      class Outer{
          public Inner inner(){
                return new Inner(){     //创建匿名内部类对象
                   //匿名内部类方法以及字段 
                    ......
                }; //匿名内部类特有的分号并不是用来表示内部类的结束,事实上是表示一个表达式的结束,而该表达式正好包含了匿名内部类         
           }
       }


     //在接口上使用匿名内部类
     interface Inner{void f();}
     class Outer{
          public Inner inner(){
               return new Inner(){
                   public void f(){......} 
               };
          }    

      }
 b.基类带参构造器生成匿名内部类对象

 //匿名类内部不使用参数
    class Base{
          private String s;
          public Base(String x){ s = x;}
          public String sign(){ return s;}
     }
     class Outer{
          public Base base(String y){
               return new Base(y){  //参数y将不被使用在匿名类内部,而是传递给匿名类的基类(Base)构造器
                    public String sign(){return super.sign()+"in Outer_Base" ;}

               };
          }
     }

     //匿名类使用参数
     interface Inner{String readlable();}
     class Outer{
          public Inner inner(final String dest){  //参数被使用在匿名内部类中,要求参数引用是final,而在java 8中则取消了这种限制
              return new Inner(){  
                  private String lable = dest; 
                  public String readLable(){return lable;}
              };
          }
     }

第二部分 内部类对象的创建

  1. 非静态内部类
class Outer{
    //外部类自定义字段和方法
    ......
    class Inner{
    //内部类字段和方法
    ......
    }
    public static void main(String[] args){
        Outer.Inner in = new Outer().new Inner();
    }
}

2、静态内部类

class Outer{
    //外部类自定义字段和方法
    ......
    static class Inner{
    //内部类字段和方法
    ......
    }
    public static void main(String[] args){
        Outer.Inner in = new Outer.Inner();
    }
}

3、使用.this创建正确类型的外部类对象引用

public class OuterThis {
    public String f(){
        return "OuterThis.f()";     

    public Inner inner(){
        return new Inner();
    }

    class Inner{
        public OuterThis getOuterThis(){
            return OuterThis.this;
        }
    }
    public static void main(String[] args){
        OuterThis ot = new OuterThis();
        OuterThis in = ot.inner().getOuterThis();
        if(ot.f().equals(in.f()))
            System.out.println("it's ok");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值