内部类浅解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39088514/article/details/73264473

内部类浅解

成员内部类

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

  • 代码如下:

        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

猜你喜欢

转载自blog.csdn.net/qq_39088514/article/details/73264473