跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 综合服务 > 社群媒体 > 【JavaSE】你真的了解内部类吗?

【JavaSE】你真的了解内部类吗?

时间:2024-04-18 19:35:29 来源:网络cs 作者:往北 栏目:社群媒体 阅读:

标签: 内部 

前言

本篇会详细讲解内部类的四种形式,让你掌握内部类~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

 内部类介绍

实例内部类

定义

调用

静态内部类

定义

调用

匿名内部类

定义和调用1

调用方法2

局部内部类

定义和调用


 内部类介绍

在 Java 中,可以将一个类定义在另一个类或者一个方法的内部, 前者称为内部类,后者称为外部类。(B类定义在A类的内部,称B类为内部类,A类为外部类)内部类也是封装的一种体现。

内部类分为三种

实例内部类、静态内部类、匿名内部类、局部内部类

实例内部类

定义

实例内部类定义在外部类的里面,方法的外面

class OuterClass{    public int data1=1;    public int data2=2;    public static int data3=3;      class InnerClass{        public int data4=4;        public int data5=5;        public static int data6=6;                //内部类的成员方法        public void test(){            System.out.println("InnerClass::test()");        }    }    public void testA(){        System.out.println("OuterClass::testA()");    }}

调用

实例内部类的实例化  

外部类.内部类  内部类引用=外部类引用.new内部类对象

实例内部类可以理解为是外部类的一个成员,要通过外部类的引用来调用

    public static void main(String[] args) {        OuterClass outerClass=new OuterClass();//实例化外部类              OuterClass.InnerClass innerClass=outerClass.new InnerClass();//实例化内部类        innerClass.test();//调用内部类中的成员方法    }

 实例内部类的方法可以调用自己的成员变量及外部类的成员变量

        //内部类的成员方法        public void test(){            System.out.println("InnerClass::test()");            System.out.println(data4);            System.out.println(data5);            System.out.println(data6);            System.out.println("###########");            System.out.println(data1);            System.out.println(data2);            System.out.println(data3);        }

 调用test方法 结果如图

 当内部类和外部类有相同的成员变量时,首先会访问内部类中的成员

此时,若就想访问外部类的成员变量,可以使用 外部类.this.成员变量 即可访问

 

静态内部类

定义

静态内部类定义在 外部类的里面,方法的外面,并且用static修饰

生成内部类引用不需要外部类引用的调用

class OuterClass{    public int data1=1;    public int data2=2;    public static int data3=3;    //静态内部类,外部类的里面,方法的外面,并且用static修饰    static class InnerClass{        public int data4=4;        public int data5=5;        public static int data6=6;        //内部类的成员方法        public void test(){            System.out.println("InnerClass::test()");        }    }    public void testA(){        System.out.println("OuterClass::testA()");    }

调用

静态内部类的实例化  

        OuterClass.InnerClass innerClass=new OuterClass.InnerClass();        innerClass.test();

 调用外部类的成员变量,通过直接在静态内部类的成员方法中 实例化一个外部类对象,通过对象直接调用外部类的成员变量

//静态内部类的成员方法        public void test(){            System.out.println("InnerClass::test()");            OuterClass outerClass=new OuterClass();            System.out.println(data4);            System.out.println(data5);            System.out.println(data6);            System.out.println("###########");            System.out.println(outerClass.data1);            System.out.println(data3);        }

 结果

内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件

匿名内部类

定义和调用1

相当于一个类实现了这个接口,同时重写了test方法

//接口interface ITestable{    void test();}public class Test4 {    public static void main(String[] args) {//匿名内部类        new ITestable(){            @Override//重写了接口的方法            public void test() {                System.out.println("test(");            }        }.test();//调用test方法  直接在后面.test方法    }}

调用方法2

通过引用对象it调用test方法

        ITestable it =new ITestable() {            @Override            public void test() {                System.out.println("test()");            }        };        it.test();

 

局部内部类

定义和调用

定义在外部类的方法中的类

class OuterClass{    public int  data1=1;    public void testA(){        //局部内部类 定义在方法里面  只能在当前方法中使用        class InnerClass {            public int data1=100;            public static int data2=2;            public void test(){                System.out.println("InnerClass::test");            }        }//局部内部类 只能在当前方法testA中使用        InnerClass innerClass=new InnerClass();        innerClass.test();    }  }

注意:

局部内部类只能在所定义的方法体内部使用不能被public、static等修饰符修饰编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class几乎不会使用

本文链接:https://www.kjpai.cn/news/2024-04-18/160154.html,文章来源:网络cs,作者:往北,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇:单调栈(C/C++)

下一篇:返回列表

文章评论