内部类浅解

内部类浅解

成员内部类
  • 作为成员类,与外部类的属性方法并列。
  • 成员内部类持有外部类的引用,释放的时候需要先释放内部类对象的任务,否则会造成内存泄漏
  • 一旦编译成功,则会产生两个类

  • 代码如下:

        public class Test2 {
     private int c=10;
     void show(){
         System.out.println("Out"+c);
     }
     class Inner{
         int a=10;
         void show1(){
             System.out.println("INner"+a+c);
         }
     }
    }
  • 当我们调用内部类的时候,需要先引用出来外部类。
     public static void main(String[] args) {
            Test2 t2=new Test2();
            t2.show();
          Test2.Inner i=t2.new Inner();
          Test2.Inner in=new Test2().new Inner();
          i.show1();
          in.show1();
        }-
  • 运行结果如下:

         Out------>10
         INner0------->1010    
         INner0------->1010   
    
局部内部类
  • 写在方法中的,一般来说,需要返回对象,之后想什么时候调用就什么时候调用
  • 局部内部类,访问方法中的变量,变量需要定义成final。
  • 局部内部类之后还会使用,如果不定义成final的,变量就会随着方法的结束从栈内存消失、导致局部内部类不能访问局部变量
  • 代码如下:
 void show(final int c){
         class ShowClass{
             void reInr(){
                 System.out.println(c);
             }
         }
         new ShowClass().reInr();
         System.out.println("Out------>"+c); 
     }

        Test2 t2=new Test2();
            t2.show(50);
    运行结果: 50
匿名内部类
  • 没有抽象方法的抽象类
  • 代码如下:
   public abstract class Test4 {
    abstract void show();
    }
    class show{
        public static void main(String[] args) {
            Test4 t4=new Test4() {
                @Override
                void show() {
            System.out.println("这是匿名内部类实现的方法");
                }
            };
            t4.show();
        }
    } 
静态内部类
  • 静态内部类不需要有外部类对象
  • 静态内部类不持有外部类对象的引用
  • 静态内部类不能访问外部的非静态成员

    代码如下:

  public class Test5 {
    private int age=10;
    static private int as=20;
    void show(){
        System.out.println("age------->"+age);
        System.out.println("as------>"+as);
    }
    static void Show1(){
        System.out.println("as------>"+as);
    }
    static class StaticMethod{
        void Sshow(){
            System.out.println("age------->"+age);
        System.out.println("as------>"+as);
        }
        static void SSshow(){
            System.out.println("age------->"+age);
        System.out.println("as------>"+as);
        }
    }
    }

从代码中我们可以看到,有两处错误,当我们的内部类定义成静态的之后,就只能访问外部类的静态属性。无论内部类的方法是否为静态的。

结束
     ---------------2017年6月14日23:52:44 syf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值