• 内部类的应用


     

            一、内部类的概念:

    1.将一个类定义在另一个类的里面,对里面那个类就称为内部类,或者叫做内置类,嵌套类。

    2.访问特点:内部类可以直接访问外部类中的成员,包括成员变量和成员方法,也包括私有成员;而外部类要访问内部类中的成员必须要建立内部类的的对象:代码体现如下:

    class InnerclassDemo
    {
     public static void main(String[] args)
     {
       Outer ou=new Outer();
       ou.method();
     }
    }
    class Outer
    {
     private int age=25;
     class Inner
     {
      int age=19;
      void show()
      {
       System.out.println("age="+Outer.this.age);//直接访问内部类中成员
       //如果本类中有局部变量,就访问本类,如果没有就访问父类中
      //成员变量,因为有一条默认语句Outer.this.age
      }
     }
     void method()
     {
      System.out.println("Outer method");3
      Inner in=new Inner();//建立内部类对象,访问内部类方法
      in.show();

    Outer.Inner in=new Outer().new Inner();

    in.show();//直接访问内部类的方法
     }
    }

             二、内部类的位置

    1、成员变量位置上,那么可以被private static成员修饰符修饰,具体功能属性等可以参考成员变量。而且被static修饰后的内部类只能访问外部类中的静态变量,就是你是静态的,你只能访问静态的,因为静态的是随着类的加载而被加载的,而非静态的是随着对象的建立而被封装的,所以它优先于静态而存在。

    static:访问受到限制:

    private:将内部类封装在了外部类中,不能为外部其他类之间访问

    如果没有私有化,外部类可以直接访问到内部类,格式如下:

    外部类名、内部类名变量名=外部类对象、内部类对象;

    Outer.Inner in=new Outer().new Inner();

    外部类直接访问静态内部类中的非静态成员:

    new Outer.Inner.function();注意创建的是内部类的对象

    外部类直接访问静态内部类中的静态变量:

    Outer.Inner.function();可以直接用类名访问静态成员;

    注意:该内部类中的成员是静态的,那么类也应该是静态的。

    如果外部类静态成员访问该内部类成员时,内部类必须是静态的,否则无法访问;

    2.在局部位置上,可以直接访问外部类中的成员,同时可以访问所有局部中的局部变量,但必须是被final修饰的,具体代码如下:

    class InnerDemo
    {
     public static void main(String[] args)
     {
       Outer ou=new Outer();
       ou.show();
     }
    }
    class Outer
    {
     private int age;
     public void show()
     {
      
      class Inner
      {
       final int num=9;
       void method(){
       System.out.println("num="+num);
       }

      }
      new Inner().method();
     }
    }

    //程序执行过程:首先main主函数、外部类Outer()构造方法,创建一个对象,将地址给引用ou,然后该对象调用Outer中的方法show();然后程序执行show(),内部类创建了一个对象,然后调用里面的method()方法,然后method()方法用调用被final修饰的局部变量。

    也可以向show(final int a)传递一个final类型的参数,一样打印,因为都是局部变量:

    3.匿名内部类,其实就是一种简写形式,它的前提是内部类必须继承一个其他外部父类或者接口,它是一个带内容的对象。代码体现如下:

    class InnerclassDemo1
    {
     public static void main(String[] args)
     {
      Outer ou=new Outer();
      ou.method();
     }
    }
    abstract class Abs
    {
     abstract void show();
     abstract void abs();
    }
    class Outer
    {
     private int age;
     
     public void method()
     {
      
      
      Abs b=new Abs()
      {
       int num=9;
       void show()
       {
        System.out.println("show1");
       }
       void abs()
       {
        System.out.println("abs 1");
       }
      };//这是一个带内容的匿名对象,使用父类的名称创建。
      b.show();//自己在创建对象的同时又重写了父类中的内容,然后自己再调用
      b.abs();
     }
    }

  • 相关阅读:
    归并排序
    mysql优化
    树结构
    urllib库的使用
    linux常用命令
    mysql慢查询
    支付宝第三方支付
    类型(type)判断
    c语言自带的排序与查找
    多字节与宽字节转换
  • 原文地址:https://www.cnblogs.com/warrior4236/p/6055734.html
Copyright © 2020-2023  润新知