內部類

內部類

        把類定義在其餘類的內部;在A類中定義一個B類,B類就是內部類面試

        特色

                 1 內部類能夠直接訪問外部類的成員,包括私有ide

                 2 外部類要訪問內部類的成員,必須建立對象this

位置劃分: 成員內部類,局部內部類spa

成員內部類建立對象: 外部類名.內部類名 對象名 = 外部類對象.內部類對象

class Out {
    private int outNum = 10;
    class In {
        public void getOutNum(){
            // 10
            System.out.println(outNum);
        }
    }
}
public class OutAndIn {
    public static void main(String[] args) {
        Out.In  oi= new Out().new In();
        oi.getOutNum();
    }
}

靜態內部類: 只能訪問外部類的靜態成員

建立對象方式; 外部類名.內部類名 對象名 = new 外部類名.內部類名();對象

class Out {
    private static int outNum = 10;
   public static class In {
        public void getOutNum(){
            // 10
            System.out.println(outNum);
        }
    }
}
public class OutAndIn {
    public static void main(String[] args) {
        Out.In  oi= new Out.In();
        oi.getOutNum();
    }
}

面試題繼承

class Out {
    private int num = 10;

    public class In {
        private int num = 30;

        public void getOutNum() {
            int num = 50;
            // 50
            System.out.println(num);
            // 30
            System.out.println(this.num);
            // 10
            System.out.println(new Out().num);
            // 10
            System.out.println(Out.this.num);
        }
    }
}
public class OutAndIn {
    public static void main(String[] args) {
        Out.In oi = new Out().new In();
        oi.getOutNum();
    }
}

局部內部類接口

class Out {
    private int num = 10;

    public void getOutNum() {

        class In {
            public void getNum() {
                // 10
                System.out.println(num);
            }
        }

        In in = new In();
        in.getNum();
    }
}
public class OutAndIn {
    public static void main(String[] args) {
        new Out().getOutNum();
    }
}

匿名內部類

        內部類的簡化寫法get

        前提: 存在一個類(具體類或者抽象類)或者接口class

        格式: new 類名或者接口名() {重寫方法}方法

        本質: 是一個繼承了類或者實現了接口的子類匿名對象

interface In {
    void getNum();
}

class Out {
    private int num = 10;

    public void getOutNum() {

        new In() {
            @Override
            public void getNum() {
                System.out.println(num);
            }
        }.getNum();
    }
}
public class OutAndIn {
    public static void main(String[] args) {
        new Out().getOutNum();
    }
}
interface In {
    void getNum();
}

class Out {
    private int num = 10;

    public In getOutNum() {

       return new In() {
            @Override
            public void getNum() {
                System.out.println(num);
            }
        };
    }
}
public class OutAndIn {
    public static void main(String[] args) {
        new Out().getOutNum().getNum();
    }
}
相關文章
相關標籤/搜索