Java --- 内部类

news2025/1/19 23:08:38

目录

一、什么是内部类

二、为什么需要内部类

三、内部类的分类 

 3.1、成员内部类

 3.2、局部内部类

 四、练习

一、什么是内部类

将一个类A定义在另一个类B里面,里面的那个类A就称为内部类(InnerClass,类B则称为外部类(OuterClass

二、为什么需要内部类

具体来说,当一个事物A的内部,还有一个部分需要一个完整的结构B进行描述,而这个内部的完整的结构B又只为外部事物A提供服务,不在其他地方单独使用,那么整个内部的完整结构B最好使用内部类。

总的来说,遵循高内聚、低耦合的面向对象开发原则。

三、内部类的分类 

 

 

 3.1、成员内部类

  • 成员内部类作为类的成员的角色
    • 和外部类不同,Inner class还可以声明为private或protected;
    • 可以调用外部类的结构。(注意:在静态内部类中不能使用外部类的非静态成员)
    • Inner class 可以声明为static的,但此时就不能再使用外层类的非static的成员变量;
  • 成员内部类作为类的角色
    • 可以在内部定义属性、方法、构造器等结构
    • 可以继承自己的想要继承的父类,实现自己想要实现的父接口们,和外部类的父类和父接口无关
    • 可以声明为abstract类 ,因此可以被其它的内部类继承
    • 可以声明为final的,表示不能被继承
    • 编译以后生成OuterClass$InnerClass.class字节码文件(也适用于局部内部类)
public class OuterClass {
    public static void main(String[] args) {
        //创建静态成员内部类对象
        Person.Cat cat = new Person.Cat();
        cat.method();
        //创建非静态成员内部类对象
        Person person = new Person();
        Person.Bird  bird = person.new Bird();
        bird.method();
        bird.method2("形参名");
        bird.method1();
    }


}
//外部类
class Person{
    String name = "外部类";
    //静态成员内部类
    static class Cat{
       public  void method(){
           System.out.println("静态成员内部类创建成功");
       }
    }
    //非静态成员内部类
    class Bird{
        String name = "内部类";
        public  void method(){
            System.out.println("非静态成员内部类创建成功");
        }
        public void method2(String name){
            System.out.println("调用形参的name:" + name);
            System.out.println("调用内部类属性的name:" + this.name);
            System.out.println("调用外部类属性的name:" +  Person.this.name);
        }
        public void method1(){
            method();
            Person.this.method();
        }
    }
    public void method(){
        System.out.println("正在吃饭。。。");
    }
}

 3.2、局部内部类

class A{
    public Comparable method(){
        //非匿名局部内部类
//        class MyComparable implements Comparable{
//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        }
//        return new MyComparable();
        //非匿名内部类
//        Comparable<Object> comparable = new Comparable<>() {
//            @Override
//            public int compareTo(Object o) {
//                return 0;
//            }
//        };
//        return comparable;
        //匿名内部类
       return new Comparable() {
           @Override
           public int compareTo(Object o) {
               return 0;
           }
       };
    }
}

 四、练习

public class InnerObjTest {
    public static void main(String[] args) {
        Inner inner = new Inner();
        inner.method();
    }
}
class Inner{
    public void method(){
        //匿名内部类
        new Object(){
            //定义方法
            public void test(){
                System.out.println("hello word");
            }
        }.test();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/925764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL 错误 [22007]: ERROR: invalid input syntax for type date: ““

0. 背景 PG数据库一张表有这样一个varchar类型的字段end_date,存储的值是格式化后的年月日日期如 2024-08-10 现在我需要根据当前日期与end_date的差值作为where条件过滤,我的写法 select …… from my_table_name where current_date - cast (end_date as date) >100报错…

苹果“迎难而上”,印度赚印度花,扩大产能,推动手机制造业发展

根据报道&#xff0c;苹果公司在由印度当地媒体 Business Today 报道的会议中表示&#xff0c;他们计划扩大在印度的生产产能。这也进一步显示了苹果对印度市场的重视程度。 据统计数据显示&#xff0c;印度已成为苹果第五大iPhone市场&#xff0c;其市场营收超越了法国和德国&…

React绑定antd输入框,点击清空或者确定按钮实现清空输入框内容

其实实现原理和vue的双向绑定是一样的&#xff0c;就是监听输入框的onChange事件&#xff0c;绑定value值&#xff0c;当输入框内容发生变化后&#xff0c;就重新设置这个value值。 示例代码&#xff1a;我这里是统一在handleCancel这个函数里面处理清空逻辑了&#xff0c;你们…

再写CentOS7升级OpenSSL-1.0.1U

本文在CentOS7.4以及TencentOS 2.4上测试通过。 原系统自带OpenSSL 1.0.2k-fips。 编译安装方法跟之前的没啥区别。 从官网下载1.0.1u版https://www.openssl.org/source/ 使用tar解包 tar xfz openssl-1.0.1u.tar.gz 依次执行如下&#xff1a; cd openssl-1.0.1u ./con…

pdf转ppt软件哪个好用?推荐一个好用的pdf转ppt软件

在日常工作和学习中&#xff0c;我们经常会遇到需要将PDF文件转换为PPT格式的情况。PDF格式的文件通常用于展示和保留文档的原始格式&#xff0c;而PPT格式则更适合用于演示和展示。为了满足这一需求&#xff0c;许多软件提供了PDF转PPT的功能&#xff0c;使我们能够方便地将PD…

成都优优聚做美团代运营还有市场吗?

成都优优聚公司是一家专注于美团代运营的企业。作为美团的第三方代运营商&#xff0c;公司致力于帮助商家提升线上形象&#xff0c;提高销售额&#xff0c;实现转型升级。在与美团合作的多年间&#xff0c;公司已积累了丰富的经验和优秀的专业团队。 作为一个代运营商&#xff…

VK0192是标准LCD显示面板/液晶显示屏驱动芯片(IC)-24SEG×8COM

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK0192 封装形式&#xff1a;LQFP44 概述 VK0192是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大192点&#xff08;24SEGx8COM&#xff09; 的LCD屏。单片机可通过3/4线串行接口配置显示参数和发送显示数据…

恢复照片软件,记好这几个,照片恢复很简单!

“我真的很喜欢拍摄各种各样的照片&#xff0c;然后在电脑上进行修图。但是吧&#xff01;我比较马虎&#xff0c;在挑选照片时经常会误删一些很好看的照片。真的很需要一款专门恢复照片的软件&#xff0c;想问问有什么好的推荐吗&#xff1f;” 无意中删除了重要的照片真的会让…

GE 8920-PS-DC安全模块

安全控制&#xff1a; 这个安全模块通常用于实现工业自动化系统中的安全控制功能。它可以监测各种安全参数&#xff0c;如机器运动、温度、压力等&#xff0c;以确保系统在安全范围内运行。 PLC兼容性&#xff1a; 通常&#xff0c;这种安全模块可以与可编程逻辑控制器&#x…

Cesium 使用 Entity 绘制点线面

文章目录 一、绘制点1. 第一种2. 第二种 二、绘制面三、绘制线四、移除 Entity <!--* Author: HuKang* Date: 2023-08-18 11:06:43* LastEditTime: 2023-08-25 09:16:59* LastEditors: HuKang* Description: program-c* FilePath: \global-data-display\src\views\program-c…

图像读取、显示与保存

一、图像读取 二、图像显示 namedWindow(const String &winname, int flags WINDOW_AUTOSIZE) imshow(const String &winname, InputArray mat) 三、图像保存 #include <opencv2/opencv.hpp> //the basic building blocks of the library #include <…

黑客炼成手册

一、什么是网络安全&#xff1f;什么是黑客&#xff1f; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等…

Nature重大突破:科学家成功完成Y染色体测序,标志着人类基因组的完整解读

这张扫描电子显微镜图像显示了一对连接的Y染色体&#xff08;右&#xff09;与一对连接的X染色体相比&#xff0c;在细胞分裂前期时重复的Y染色体&#xff08;右&#xff09;小了多少。图片来源&#xff1a;BIOPHOTO ASSOCIATES/SCIENCE SOURCE 长期以来&#xff0c;Y染色体的全…

Hugo快速创建和发布网站

你应该先阅读Windows上安装Hugo的环境。 我们使用PowerShell运行下面的Hugo命令。 1 创建网站 我们在文档下面创建一个名为MyHugoSite的目录结构&#xff1a; cd Documents hugo new site MyHugoSite cd MyHugoSite提示告诉我们有关主题的获取方式、文件的添加和站点的构建。…

uni.uploadFile上传 PHP接收不到

开始这样&#xff0c;后端$file $request->file(file);接收不到 数据跑到param中去了 去掉Content-Type&#xff0c;就能接收到了 param只剩下

maven可用的插件列表

maven可用的插件列表&#xff1a;https://maven.apache.org/plugins/ 在插件列表页面找到自己想要了解的插件&#xff0c;点击进去&#xff0c;可以看到插件的详细信息&#xff0c;例如这个插件有哪些goals&#xff0c;goal的参数、用法、样例等&#xff0c;还是很有用的。 B…

Python支持下最新Noah-MP陆面模式站点、区域模拟及可视化分析技术

查看原文>>> Python支持下最新Noah-MP陆面模式站点、区域模拟及可视化分析技术 熟悉陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用&#xff1b;深入理解Noah-MP 5.0模型的原理&#xff0c;掌握Noah-MP模型&#xff08;2023年最新发布的5.0版本&am…

【云卓笔记】mavlink java文件

根据飞控提供的xml文件来生成的 生成的就是这样的java文件 准备工作: Mavlink协议生成 参考 1.安装mavlink : 使用MAVLink工具的要求是 Python 3.3 (recommended) or Python 2.7 Python future模块 (可选) PythonTklnter模块(如果需要使用图形用户界面)。 环境变量PYTHO…

容器进阶操作

查看容器信息 容器创建成功后&#xff0c;用户可以通过docker inspect命令查看容器的详细信息&#xff0c;这些详细信息包括容器的id、容器名、环境变量、运行命令、主机配置、网络配置以及数据卷配置等信息。执行部分结果如下图&#xff1a; 使用format参数可以只查看用户关心…

浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用

夏日已至&#xff0c;台风和暴雨等极端天气频繁出现。在城市运行过程中&#xff0c;台风所带来的暴雨可能会导致城市内涝等次生灾害&#xff0c;引发交通瘫痪、地铁停运、管网泄漏爆管、路面塌陷、防洪排涝、燃气爆炸、供热安全、管廊安全、消防火灾等安全隐患&#xff0c;影响…