25.JAVA编程之内部类

成员内部类

示例代码:

public class Demo {

    public static void main(String[] args) {
        Outer outer = new Outer();
        //在外部创建成员内部类的实例,因为成员内部类需要依赖外部类的对象
        //通常情况下,我们不建议这样来实例化内部类的对象
        //Outer.Inner inner = outer.new Inner();
        //inner.print();

        outer.innerPrint();
    }
}

class Outer{
    private String name;
    //建议在外部类中定一个方法,对外提供访问内部类的方法
    public void innerPrint(){
        Inner inner = new Inner();
        inner.print();
    }
    //成员内部类:直接在类中定义的类
    private class Inner{
        public void print(){
            System.out.println("inner");
        }
    }
}

方法内部类

概念:在一个类中方法内定义一个类
注意:
1.方法内部类只能在定义该内部类的方法内实例化,不可以在次方外对其实例化。
2.方法内部类对象不能使用该内部类所在方法的非final局部变量
示例代码:

public class Demo {

    public static void main(String[] args) {
        Outer outer = new Outer();
        //在外部创建成员内部类的实例,因为成员内部类需要依赖外部类的对象
        //通常情况下,我们不建议这样来实例化内部类的对象
        //Outer.Inner inner = outer.new Inner();
        //inner.print();
        outer.innerPrint();

        outer.show();
    }
}

class Outer{
    private String name;
    //-----------------------成员内部类
    //建议在外部类中定一个方法,对外提供访问内部类的方法
    public void innerPrint(){
        Inner inner = new Inner();
        inner.print();
    }
    //成员内部类:直接在类中定义的类
    private class Inner{
        public void print(){
            System.out.println("成员内部类");
        }
    }

    //-----------------------方法内部类
    //show方法的局部变量或方法的参数,实际上必须是常量final
    public void show(){
        final int x = 10;
        class Inner2{
            public void print(){
                //x++; 报错:从内部类引用的本地变量必须是最终变量或实际上的最终变量
                System.out.println("方法内部类"+x);
            }
        }
        Inner2 inner2 = new Inner2();
        inner2.print();
    }
}

静态内部类

概念:在一个类内定义一个静态的内部类
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它,静态嵌套类仅能访问外部类的静态成员和方法
示例代码:

public class Demo {
    public static void main(String[] args) {
        Outer outer = new Outer();
        //在外部创建成员内部类的实例,因为成员内部类需要依赖外部类的对象
        //通常情况下,我们不建议这样来实例化内部类的对象
        //Outer.Inner inner = outer.new Inner();
        //inner.print();
        outer.innerPrint();
        outer.show();
        Outer.Inner3 inner3 = new Outer.Inner3();
        inner3.print();
    }
}

class Outer{
    private String name = "xiaohua";
    //-----------------------成员内部类
    //建议在外部类中定一个方法,对外提供访问内部类的方法
    public void innerPrint(){
        Inner inner = new Inner();
        inner.print();
    }
    //成员内部类:直接在类中定义的类
    private class Inner{
        public void print(){
            System.out.println("成员内部类"+name);
        }
    }

    //-----------------------方法内部类
    //show方法的局部变量或方法的参数,实际上必须是常量final
    public void show(){
        final int x = 10;
        class Inner2{
            public void print(){
                //x++; 报错:从内部类引用的本地变量必须是最终变量或实际上的最终变量
                System.out.println("方法内部类"+x+name);
            }
        }
        Inner2 inner2 = new Inner2();
        inner2.print();
    }
    //--------------------静态内部类
    static class Inner3{
        public void print(){
            System.out.println("静态内部类");
        }
    }
}

匿名内部类

概念:没有名字的内部类
匿名内部类

你可能感兴趣的:(25.JAVA编程之内部类)