java内部类

 

传说是好多专业人士比较烦感的一种类

  看似如果java基础掌握的不好就不能把内部类掌握透彻。

  来看定义:内部类即为定义在其它代码块(类体或方法体)里的类,且根据位置不同分为四种。

  1)static inner class:
     ①定义的位置:类以内,方法之外,有静态修饰(static可以修饰内部类)
    ②本身能定义的属性和功能:所有的属性和功能,包括静态和非静态的
    ③能直接访问什么:只能访问外部类的静态属性和功能
    ④怎么创建对象:Outer.Inner in = new Outer.Inner();
 
  2)member inner class:
    ①定义的位置:类以内,方法之外,没有静态修饰
    ②本身能定义的属性和功能:只能定义非静态的属性和功能
    ③能直接访问什么:能访问外部类的所有的属性和功能
    ④怎么创建对象:Outer.Inner in2 = new Outer().new Inner();
      或者 在Outer里提供一个getInner(),返回内部类的对象

eg:class Outer11{
     private int num = 3;
     public static int index = 4;
 
     class Inner{
         int num = 5;
         //static int index = 6; -----> error!
         public void get(){
         int num = 6;
         System.out.println(num);//6
         System.out.println(this.num);//5
         System.out.println(Outer11.index);//4
         System.out.println(Outer11.this.num);//3
      }
 }

//大家可以发现静态类和成员类在定义的属性和功能和访问权限上似是相对的,但是注意不要记混哦。
 
  3)local inner class:
    ①定义的位置:方法里面的类,前面不能用public或者static修饰
    ②本身能定义的属性和功能:只能定义非静态的属性和功能
    ③能直接访问什么:能够访问外部类的所有属性和功能, 以及方法的用final修饰的局部变量
    ④怎么创建对象:相当于局部变量,只能在方法里面创建对象
 
  4)annonymous inner class:
     ①是一个特殊的局部内部类,没有名字,没有构造方法,可以实现 一个接口或者继承一个类,生命周期里只能产生一个对象
        ②除了没有名字外,能定义的和能访问的都和普通的局部内部类一致
       ③当试图创建接口或者抽象类对象的时候,
         用匿名内部类表示类体的{}紧跟在构造方法之后,
         调用匿名内部类的方法只能用写类时创建的那个对象

  eg:if(num==2) return new Teacher(){         //Teacher()构造方法;
            public void teach(){    
            System.out.println("Web");
           } 
          };

  调用时也如此:

  eg:对象名.set(new Teacher(){
             public void teach(){    
             System.out.println("CoreJava");
             }
             } , 3);     
 
            public void set(Teacher t,int num){ 
             t.teach();
            System.out.println(num);
            }

      
   
  5)作用:
    ①不破坏访问权限的情况下,可以使用外部类的私有成员变量和方法。
    ②将接口公开,把实现类作为内部类隐藏起来,要求使用者使用接口, 强制降低耦合度。
    ③Java通过接口和内部类两种机制来实现多继承,因为在java里,一个类可以继承一个父类,或者几个接口,所以当父类为抽象时,在本类中必须要实现父类和接口里所有的抽象方法,这时方法若不是同名还好,若同名就比较不好解决,这时候就采用内部类的方法来解决就可以了。

内部类不算是特别重要,但是在视图的设计中常用到匿名抽象类,所以这部份,主要把局部抽象类和匿名抽象类掌握一下吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值