bugstar

导航

9.内部类

内部类分为静态和非静态两种,区分的标识为static
1.定义和概念
1.1非静态内部类

内部类的可以访问外部类的的成员,但是外部类如果要访问内部类

1.2静态内部类

二者关系:

2.使用内部类:

//Out
public class Out {
    //In
    public class In {
        public In(String msg){
            System.out.println("fun of in, msg: " + msg);
        }
    }
} 

123456789 public class Study {
    public static void main(String[] args) {
        Out.In in1 = new Out().new In("first");
        //create In type varable
        Out.In in2;
        Out out = new Out();
        in2 = out.new In("Second"); 
    }//main
} 

3.局部内部类

4.匿名内部类

//Command.java
public interface Command {
    void process(int[] target);
} 

1234567891011121314 //AddCommand
public class AddCommand implements Command {
 
    @Override
    public void process(int[] target) {
        // TODO Auto-generated method stub
        int sum = 0;
        for (int tmp : target) {
            sum += tmp;
        }
        System.out.println(sum);
    }
 
} 
 //ProcessArray.java
public class ProcessArray {
    public void process(int[] target, Command cmd){
        cmd.process(target);
    }
} 

12345678 //Main.java
public class Main {
    public static void main(String[] args){
        ProcessArray ay = new ProcessArray();
        int[] array = {1, 2, 3};
        ay.process(array, new AddCommand());
    }
} 

将类的实现用匿名内部类替换:

 //Main.java
public class Main {
    public static void main(String[] args){
        ProcessArray ay = new ProcessArray();
        int[] array = {1, 2, 3};
        ay.process(array, new AddCommand()
        {
            @Override
            public void process(int[] target) {
                // TODO Auto-generated method stub
                int sum = 0;
                for (int tmp : target) {
                    sum += tmp;
                }
                System.out.println(sum);
            }
        });
    }
}

posted on 2018-03-02 11:54  bugstar  阅读(78)  评论(0编辑  收藏  举报