首页 > 其他分享 >内部类

内部类

时间:2024-05-13 23:19:52浏览次数:29  
标签:内部 void System println public out

1 内部类

1.1 概述

(1) 什么是内部类?

将一个类A定义在另一个类B里面,A称为内部类,B称为外部类

【案例】

public class Outer {
    
    //成员内部类
    class Inner{
        
    }
    
    
    public void methodOne(){
        
        //局部内部类
        class Inner1{
        }
        
    }
    
}

(2) 内部类有哪些形式?

根据内部类声明的位置,可分为

成员内部类 静态成员内部类
非静态成员内部类
局部内部类 有名字的局部内部类
匿名内部类

 

2 静态成员内部类

【案例1】

public class Outer {
    private int three;
    private static int four;

    // 静态成员内部类
    // 静态成员内部类可以声明静态成员,也可以声明普通成员
    // 静态成员内部类不能访问外部类的普通成员,只能访问外部类的静态成员
    // 内部类可以访问外部类的私有成员
    public static class Inner{
        private int one;
        private static int two;

        public void methodOne(){
            System.out.println(one);
            System.out.println(two);
            // System.out.println(three);   ×
            System.out.println(four);
            // methodThree();               ×
            methodFour();
        }

        public static void methodTwo(){
            // System.out.println(one);     ×
            System.out.println(two);
            // System.out.println(three);   ×
            System.out.println(four);
            // methodThree();               ×
            methodFour();
        }
    }

    public void methodThree(){
        Inner.two = 200;
        Inner.methodTwo();
        // 在外部类类体内创建内部类对象
        // 在外部类类体内,内部类就是一个正常的类
        Inner inner = new Inner();
        inner.one = 100;
        inner.methodOne();
    }

    public static void methodFour(){

    }

}

【案例2】

public class TestOuter {
    public static void main(String[] args) {
        // 在外部类类体外表示内部类,必须使用外部类类名.内部类类名
        // 在外部类类体外,静态成员内部类可以直接创建内部类对象,不需要先创建外部类对象
        Outer.Inner inner = new Outer.Inner();
        inner.methodOne();
    }
}

 

2 普通成员内部类

【案例1】

public class Outer2 {
    private int three;
    private static int four;

    public void methodOne(){
        int five = 100;
        // 局部内部类
        // 局部内部类只能声明普通成员不能声明静态成员
        class Inner2{
            private int one;
            // private static int two;

            public void methodOne(){
                System.out.println(one);
                System.out.println(three);
                System.out.println(four);
                System.out.println(five);
            }
        }

        Inner2 inner2 = new Inner2();
    }

    public void methodTwo(){
       // Inner2 inner2 = new Inner2();
    }

}

【案例2】

public class TestOuter1 {
    public static void main(String[] args) {
        // 普通成员内部类在外部类类体创建内部类对象必须先创建外部类对象
        // 再由外部类对象创建内部类对象
        // Outer1.Inner1 inner1 = new Outer1().Inner1();
        Outer1 outer1 = new Outer1();
        Outer1.Inner1 inner1 = outer1.new Inner1();

        Outer1.Inner1 inner2 = new Outer1().new Inner1();
    }
}

 

3 局部内部类

【案例】

public class Outer2 {
    private int three;
    private static int four;

    public void methodOne(){
        int five = 100;
        // 局部内部类
        // 局部内部类只能声明普通成员不能声明静态成员
        class Inner2{
            private int one;
            // private static int two;      ×

            public void methodOne(){
                System.out.println(one);
                System.out.println(three);
                System.out.println(four);
                System.out.println(five);
            }
        }

        Inner2 inner2 = new Inner2();
    }

    public void methodTwo(){
       // Inner2 inner2 = new Inner2();     ×
    }

}



4 匿名内部类

【案例1】接口 MyInnerOne

public interface MyInnerOne {
    public void methodOne();
}

【案例2】

public class TestMyInnerOne {
    public static void main(String[] args) {
        // 匿名内部类作为接口的实现类出现
        // 阶段1
        MyInnerOne mio = new MyInnerOne(){
            @Override
            public void methodOne() {
                System.out.println("in methodOne1()~~~~~~~~~~~~~~~~~~~~");
            }
        };
        mio.methodOne();

        // 阶段2
        new MyInnerOne(){
            @Override
            public void methodOne() {
                System.out.println("in methodOne2()~~~~~~~~~~~~~~~~~~~~");
            }
        }.methodOne();

        // 阶段3
        MyInnerOne mio1 = new MyInnerOne() {
            @Override
            public void methodOne() {
                System.out.println("in methodOne3()~~~~~~~~~~~~~~~~~~~~");
            }
        };
        test(mio1);

        // 阶段4
        test(new MyInnerOne(){
            @Override
            public void methodOne() {
                System.out.println("in methodOne4()~~~~~~~~~~~~~~~~~~~~");
            }
        });
    }

    public static void test(MyInnerOne mio){
        mio.methodOne();
    }
}

运行结果:

in methodOne1()~~~~~~~~~~~~~~~~~~~~
in methodOne2()~~~~~~~~~~~~~~~~~~~~
in methodOne3()~~~~~~~~~~~~~~~~~~~~
in methodOne4()~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:内部,void,System,println,public,out
From: https://www.cnblogs.com/apple677/p/16058027.html

相关文章

  • 成员内部类
    成员内部类:1.在类的内部定义,与实例变量、实例方法同级别的类。2.外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象。3.当外部类、内部类存在重名属性时,会优先访问内部类属性。(注:如果不写,会优先访问内部类;如果想访问外部类则需要加上Outer.this)4.成员内部类不能定义静......
  • 针对企业内部的IT资产进行漏洞扫描是一项至关重要的网络安全服务
    针对企业内部的IT资产进行漏洞扫描是一项至关重要的网络安全服务,旨在识别并修复可能使企业面临网络威胁的安全漏洞。为了确保高性价比的全面覆盖性服务,以下是一些建议:扫描类型:现场扫描:由专业的安全团队亲自到企业现场,通过连接企业内网进行详细的扫描。这种方式可以更深入地了......
  • 'sh' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    我们在windows系统中执行:shnacos-config.sh-h127.0.0.1命令是报错的。报错:'sh'不是内部或外部命令,也不是可运行的程序或批处理文件。但是作为一名软件开发人员,我们的电脑上一般都是安装有git的。这个时候,我们可以使用git执行上面的命令就可以了,因为git是安装有sh命令的。......
  • nvm下载pnpm报‘pnpm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
    使用nvm下载安装pnpm进行测试的时候发现下载未报错但是使用pnpm-v此时在自己设置的nvm安装的node目录中查询nvm再次执行指令pnpm-v......
  • 内部类
    packageDemo10;importjava.applet.Applet;publicclassTest{publicstaticvoidmain(String[]args){//没有名字初始化类,不用将实例保存到变量中newApple().eat();newUservice(){@Overridepublicvoidhello(){}};}}classApple{publicvoid......
  • BMP图片内部结构
    BMP图片内部结构​ BMP文件的数据按照从文件头开始的先后顺序分为四个部分:分别是位图文件头、位图信息头、调色板(24bit位图是没有的)、位图数据(RGB)。(1)位图文件头(Bitmap-FileHeader)包含了图像类型、图像大小、两个保留字以及位图数据存放地址。(2)位图信息头(Bitmap-InformationH......
  • m2_day02 [内部类]
    课程内容:什么是内部类?成员内部类静态内部类局部内部类匿名内部类Java中如何完成数据共享什么是内部类?什么是内部类?指定义在一个类型(类/接口)当中的类被称为内部类为什么要使用内部类?1.内部类是Java当中共享数据最简单的方式之一2.它还能用来表达类......
  • 企业数据保护,从严防内部信息泄露开始
    在当今的数字化时代,数据已成为企业最宝贵的资产之一。然而,随之而来的是数据安全威胁,尤其是内部信息泄露,这不仅会导致企业面临巨大的经济损失,还可能损害企业的品牌形象和客户信任。因此,从严防内部信息泄露开始,成为企业数据保护策略中的重要一环。确立内部数据分类和权限管理企业......
  • 内网渗透测试是一种测试组织内部网络安全的方法,旨在发现和利用网络中的漏洞以及获取未
    内网渗透测试是一种测试组织内部网络安全的方法,旨在发现和利用网络中的漏洞以及获取未授权访问内部资源的能力。以下是内网渗透测试基础的一些主题:理解内网环境:理解目标组织的网络拓扑、子网划分、主机和服务。收集有关内部网络设备、操作系统、应用程序和安全配置的信......
  • 不让数据随员工走人:防止内部信息泄露的策略
    在企业运营中,维护数据安全是一项至关重要的任务。员工离职携带敏感信息的情况屡见不鲜,这不仅损害企业的商业利益,也威胁到企业的长远发展。华企盾DSC数据防泄密系统提供了一系列解决方案,帮助企业从根本上解决数据安全问题。内部文件流转功能:华企盾DSC能够限制数据只在相关部......