美文网首页
Java - 内部类

Java - 内部类

作者: aven_kang | 来源:发表于2022-06-25 09:24 被阅读0次

内部类的基本概念

截屏2022-04-15 下午4.19.58.png

内部类的作用

截屏2022-04-15 下午4.20.56.png

内部类的分类

截屏2022-04-15 下午4.23.12.png

普通(成员)内部类的格式

截屏2022-04-15 下午4.26.04.png
public class NormalOuter {

    private int cnt = 1;

    public class NormalInner {

        private int ia = 2;

        public NormalInner(){
            System.out.println("内部类的初始化");
        }

        public void show() {
            System.out.println("外部变量中cnt的数值为:" + cnt);
            System.out.println("ia =" + ia);
        }
    }

    public static void main(String[] args) {

        // 1.声明NormalOuter类型的引用指向该类型的对象
        NormalOuter normalOuter = new NormalOuter();
        // 2.声明NormalOUter类中内部类的引用指向内部类的对象
        NormalOuter.NormalInner ni = normalOuter.new NormalInner();
        // 3.调用内部类中的show方法
        ni.show();

    }
}
这部分就是如何声明及调用出内部类的流程与方法
        // 1.声明NormalOuter类型的引用指向该类型的对象
        NormalOuter normalOuter = new NormalOuter();
        // 2.声明NormalOUter类中内部类的引用指向内部类的对象
        NormalOuter.NormalInner ni = normalOuter.new NormalInner();
        // 3.调用内部类中的show方法
        ni.show();

普通内部类的使用方式

截屏2022-04-15 下午4.49.34.png
public class NormalOuter {

    private int cnt = 1;

    public class NormalInner {

        private int ia = 2;
        private int cnt = 3;

        public NormalInner(){
            System.out.println("内部类的初始化");
        }

        public void show() {
            System.out.println("外部变量中cnt的数值为:" + cnt);
            System.out.println("ia =" + ia);
        }

        public void show2(int cnt) {
            System.out.println("形参变量cnt =" + cnt); // 局部优先原则
            System.out.println("内部类中cnt =" + this.cnt);
            System.out.println("外部类中cnt =" + NormalOuter.this.cnt);
        }
    }
}

上面这段代码给我们演示了内部类与外部类参数同名时的处理方式,下面演示调用

        // 1.声明NormalOuter类型的引用指向该类型的对象
        NormalOuter normalOuter = new NormalOuter();
        // 2.声明NormalOUter类中内部类的引用指向内部类的对象
        NormalOuter.NormalInner ni = normalOuter.new NormalInner();
        ni.show2(10);

静态内部类

静态内部类的格式
截屏2022-04-15 下午4.58.55.png
public class StaticOuter {

    private int cnt = 1;
    private static int snt = 2;

    public static class StaticInner {

        private int ia = 3;

        StaticInner(){
            System.out.println("静态内部类的构造方法");
        }

        public void show() {
            System.out.println("ia =" + ia); // 3
            System.out.println("外部类中的snt =" + snt); // 2
//            System.out.println("外部类中的cnt = " + cnt); // Error:静态上下文中不能访问非晶态的成员变量,因为此时可能还没创建对象

        }
    }
}
public class StaticOuterTest {

    public static void main(String[] args) {

        StaticOuter.StaticInner ni = new StaticOuter.StaticInner();
        ni.show();
    }
}

静态内部类的使用方法

public class StaticOuter {

    private int cnt = 1;
    private static int snt = 2;

    public static void show() {
        System.out.println("我是外部类中的show方法");
    }

    public static class StaticInner {

        private int ia = 3;
        private static int snt = 4;

        StaticInner(){
            System.out.println("静态内部类的构造方法");
        }

        public void show() {
            System.out.println("ia =" + ia); // 3
            System.out.println("外部类中的snt =" + snt); // 2
//            System.out.println("外部类中的cnt = " + cnt); // Error:静态上下文中不能访问非晶态的成员变量,因为此时可能还没创建对象

        }

        public void show(int snt) {
            System.out.println("snt = "+ snt); // 就近原则
            System.out.println("内部类中的snt = "+ StaticInner.snt); // 4
            System.out.println("外部类中的snt = "+ StaticOuter.snt); // 2
            StaticOuter.show();
        }
    }
}

 StaticOuter.StaticInner ni = new StaticOuter.StaticInner();
//        ni.show();
        ni.show(5);

打印结果

静态内部类的构造方法
snt = 5
内部类中的snt = 4
外部类中的snt = 2
我是外部类中的show方法

局部内部类

局部(方法)内部类的格式
截屏2022-04-15 下午5.23.34.png
局部内部类的使用方式
截屏2022-04-15 下午5.38.43.png
public class areaOuter {

    private int cnt = 1;

    public void show() {
        // 定义一个局部变量进行测试,默认理解为final关键字修饰
        // 虽然可以省略final关键字,但建议加上
        int ic = 4;
        //定义局部内部类,只有在当前方法体的内部好使
        class AreaInner {

            private int ia = 2;
            public AreaInner(){

            }
            public void test(){
                System.out.println("ia = "+ ia); // 2
                System.out.println("cnt = " + cnt); // 1
                System.out.println("ic = "+ ic); // 4 虽然没有加final,但是默认是final的ic,因为我们没有去尝试修改这个ic,所以没报错
            }
        }

        AreaInner areaInner = new AreaInner();
        areaInner.test();

    }
}
public class areaOuterTest {

    public static void main(String[] args) {


        areaOuter area1 = new areaOuter();
        area1.show();

    }
}

相关文章

  • Java 中的方法内部类

    Java 中的方法内部类 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内...

  • PHP转JAVA的记录

    Java 数组 内部类 内部类的创建:内部类可以对包内其他类隐藏想实现一个接口时, 不想新建类文件 内部类可以访问...

  • Java内部类

    Java内部类,简单来说就是将一个类定义在另一个类或者方法里面,主要分为成员内部类,局部内部类,匿名内部类和静态内...

  • Java内部类

    Java内部类 大纲: java内部类有什么特点?为什么需要内部类? 非静态内部类持有外部类的引用 内部类的分类。...

  • 内部类

    内部类可以分为:非静态内部类;静态内部类;匿名内部类。 一、内部类 首先要说,Java为什么要使用内部类?java...

  • Java静态内部类

    Java静态内部类 博客分类: java 两种内部类 Java的内部类有两种,一种是静态内部类,另一种是普通内部类...

  • Kotlin内联类、内部类、嵌套类

    Kotlin内联类、内部类、嵌套类 在开始介绍Kotlin内联类、内部类、嵌套类之前,先简要回顾一下java中的内...

  • JavaSE基础知识学习-----内部类

    内部类 类的五个成分:属性,方法,构造器,代码块,内部类。什么是内部类?在java中,允许一个类定义在另一个类的内...

  • Java 内部类和泛型的理解

    Java 内部类 Java非静态内部类持有对外部类的引用,可以访问外部类的状态使用方法 OuterClass.th...

  • kotlin之内部类,匿名内部类与伴生对象

    个人博客:haichenyi.com。感谢关注 内部类   kotlin的内部类与java的内部类有点不同java...

网友评论

      本文标题:Java - 内部类

      本文链接:https://www.haomeiwen.com/subject/vnkqertx.html