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("静态内部类");
        }
    }
}

匿名内部类

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成...
    ikaroskun阅读 5,020评论 0 13
  • 一、内部类是什么 将一个类A的定义放在另一个类B的内部,这个类A就是内部类。 二、内部类的分类 内部类有两种分类:...
    HRocky阅读 3,446评论 0 1
  • 该项目源码地址:https://github.com/ggb2312/JavaNotes/tree/master/...
    最后的轻语_dd43阅读 3,561评论 0 1
  • 小胖从官网出发,研究下为什么我们需要些内部类,内部类的区别和联系。思考三个问题:(1)为什么需要内部类?静态内部类...
    小胖学编程阅读 5,800评论 0 6
  • Java允许在一个类里面定义另一个类,类里面的类就是内部类。内部类看似简单,其实里面大有乾坤,下面我们就来好好聊一...
    iDaniel阅读 6,057评论 1 9