• 内部类


    成员内部类实现如下:

    package innerClassDemo;
    import innerClassDemo.Foo.Goo;
    /** 成员内部类: 声明在类体中,不使用static,具有类的成员特征
       也就是,必须有类的实例才能创建内部类实例。内部类实例
       可以访问共享外部类的成员变量。很常用。
       如:链表的节点就可以定义为内部类 */
    public class InnerClassDemo {
     public static void main(String[] args) {
      Foo f1 = new Foo();
      Goo g1=f1.new Goo();
      Goo g2=f1.new Goo();
      System.out.println(g1.add() + ","+g2.add());
      Foo f2 = new Foo();
      Goo g3=f2.new Goo();
      Goo g4=f2.new Goo();
      f2.a = 2;
      System.out.println(g3.add() + ","+g4.add());
     }
    }
    class Foo{
       int a = 1;
       /** 成员内部类 */
       class Goo{
         public int add(){
           //corejava.day07.inn.Foo.this.a;
           return a+1;
         }
       }
     }

    局部内部类实现如下:

    package innerClassDemo;
    /**局部内部类:把类声明在方法中,就是局部内部类,作用域
       类似局部变量。很少见。**/
    public class LocalDemo {
     public static void main(String[] args) {
      /** 局部内部类, 在方法中声明, 作用域仅限方法中有效
          * 局部内部类可以访问 final 的局部变量
          **/
      final int a=7;
      class Foo{
       public int add(){
        return a+1;
       }
      }
      System.out.println(a);
      Foo foo=new Foo();
      System.out.println(foo.add());
     }
    }

     静态内部类实现如下:

    package innerClassDemo;

    import innerClassDemo.Koo.Foo;
    /**
     ** 静态内部类:使用static修饰,声明在类体中.
      静态内部类中可以访问外部类的静态成员。**/
    public class StaticInnerClassDemo {
     public static void main(String[] args) {
      Foo foo=new Foo();
      System.out.println(foo.add());
     }
    }
    /** 静态内部类
     * 静态内部类可以共享外部类的静态资源(属性/方法)
     **/
    class Koo{
     static int a=1;
     int b=2;
     static class Foo{
      int b=8;
      public  int add(){
       return innerClassDemo.Koo.a+innerClassDemo.Koo.Foo.this.b;
      }
     }
    }

    匿名内部类实现如下:

    package innerClassDemo;

    import java.util.Arrays;
    import java.util.Comparator;

    /**
     * 匿名内部类,匿名类:非常常见,可以写在任何地方,就像一般的语句。
       语法更象是创建对象:
       Date d = new Date(){};
       匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
       以后的类体。类体中可使用所有类的语法。
       匿名类不能写构造器。
       匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现。**/
    public class AnnDemo {
     public static void main(String[] args) {
      Goo goo=new Goo(){
       public String toString(){
        return "重写toString实现";
       }
      };
      System.out.println(goo.toString());
      System.out.println(goo.say());
      Goo goo2=new Goo();
      System.out.println(goo2.toString());
      System.out.println(goo2.say());
      Xoo xoo=new Xoo(){
       public int add() {
        // TODO Auto-generated method stub
        return 1+1;
       }
      };
      System.out.println(xoo.add());
      //匿名类实际应用案例: 自定义排序
         String[] ary = {"Andy","Tom","Jerry","Bob"};
         final int dir = -1; //排序方向
         Arrays.sort(ary, new Comparator<String>(){
           public int compare(String o1, String o2) {
             //new StringBuilder(o1).reverse().toString().compareTo()
             return dir * (o1.charAt(o1.length()-1)-
               o2.charAt(o2.length()-1));
           }
         });
         System.out.println(Arrays.toString(ary));
     }
    }
    interface Xoo{
       int add();
     }
    class Goo{
     public String toString(){
      return "toString实现";
     }
     public String say(){
      return "hello!";
     }
    }

     注意:任何内部类都编译成独立的class文件,在打包上线的时候尤其要注意不要漏掉内部类的清单,一般以$分开的
              最大的作用:封装!

  • 相关阅读:
    Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++4.2 failed with exit code 1
    Mark !
    delphi 与 C++ 进程之间的命名管道通信
    delphi 获取网页所有链接并访问赚取金币
    char类型转化为string类型 string(int n, char c)
    游戏接入支付宝遇到的一些问题
    mac下versions 提交提示 SVN Working Copy xxx locked
    上周项目遇到的问题
    使用elementPlus组件,分页功能[Pagination]时,字段:total="XXX"时,实际样式显示为 Total {total} 问题的解决办法
    Vue3+Module功能+指定Getter模块+获取不到资源
  • 原文地址:https://www.cnblogs.com/hdsbk/p/3526585.html
Copyright © 2020-2023  润新知