【Java】Java 中不同类型的类详解

news2025/4/18 6:18:20

目录

  • Java 中不同类型的类详解
    • 一、基础类类型
      • 1. 普通类(Concrete Class)
      • 2. 抽象类(Abstract Class)
      • 3. 接口(Interface)
      • 4. 枚举类(Enum Class)
    • 二、嵌套类与特殊类
      • 5. 内部类(Inner Class)
      • 6. 单例类(Singleton Class)
      • 7. 记录类(Record Class)(Java 14+)
    • 三、高级类与设计模式相关类
      • 8. 密封类(Sealed Class)(Java 17+)
      • 9. 功能接口(Functional Interface)
      • 10. 工具类(Utility Class)
      • 11. 不可变类(Immutable Class)
      • 12. 代理类(Proxy Class)
    • 四、其他重要概念
      • 13. POJO/Java Bean
      • 14. 注解类型(Annotation Type)
    • 总结表格:类类型对比

Java 中不同类型的类详解


一、基础类类型

1. 普通类(Concrete Class)

  • 定义:使用 class 声明,可直接实例化的类。

  • 特点

    • 包含属性、方法、构造方法。
    • 默认可被继承(除非用 final 修饰)。
  • 示例

    public class Animal {
        private String name;
        public Animal(String name) { this.name = name; }
        public void eat() { System.out.println(name + " is eating."); }
    }
    
  • 场景:具体业务逻辑的实现。


2. 抽象类(Abstract Class)

  • 定义:用 abstract 修饰,不可直接实例化
  • 特点
    • 可包含抽象方法(无实现)和具体方法。
    • 子类必须实现所有抽象方法(除非子类也是抽象类)。
  • 示例
    public abstract class Shape {
        public abstract double calculateArea();
        public void printInfo() { System.out.println("This is a shape."); }
    }
    
  • 场景:定义通用模板,强制子类实现特定逻辑。

3. 接口(Interface)

  • 定义:用 interface 声明,定义行为规范。
  • 特点
    • Java 8+ 支持默认方法(default)、静态方法(static)。
    • Java 9+ 支持私有方法。
    • 类通过 implements 实现接口(支持多继承)。
  • 示例
    public interface Drawable {
        void draw();
        default void setColor(String color) { System.out.println("Color: " + color); }
    }
    
  • 场景:多继承行为规范(如 ComparableRunnable)。

4. 枚举类(Enum Class)

  • 定义:用 enum 声明,表示固定常量集合。
  • 特点
    • 每个常量是枚举类的实例。
    • 可包含属性、方法、构造方法(必须 private)。
  • 示例
    public enum Day {
        MONDAY("星期一"), TUESDAY("星期二");
        private String chineseName;
        private Day(String name) { this.chineseName = name; }
        public String getChineseName() { return chineseName; }
    }
    
  • 场景:状态、类型等固定常量定义。

二、嵌套类与特殊类

5. 内部类(Inner Class)

  • 定义:定义在另一个类内部的类,分为四种类型:
    • 成员内部类(非静态):
      public class Outer {
          private int value = 10;
          public class Inner { public void printValue() { System.out.println(value); } }
      }
      
    • 静态内部类
      public class Outer {
          private static int count = 5;
          public static class StaticInner { public void printCount() { System.out.println(count); } }
      }
      
    • 局部内部类(定义在方法内):
      public void someMethod() {
          class LocalClass { /* ... */ }
      }
      
    • 匿名内部类(无类名,直接实现接口或继承类):
      Runnable task = new Runnable() { @Override public void run() { System.out.println("Running!"); } };
      
  • 场景:封装仅外部类使用的逻辑,或简化回调。

6. 单例类(Singleton Class)

  • 定义:确保全局唯一实例的类。
  • 实现方式
    • 私有构造方法 + 静态实例 + 静态获取方法。
    • 枚举实现(推荐,线程安全且防反射)。
  • 示例
    public class Singleton {
        private static Singleton instance;
        private Singleton() {}
        public static synchronized Singleton getInstance() {
            if (instance == null) { instance = new Singleton(); }
            return instance;
        }
    }
    
  • 场景:配置管理、数据库连接池等需全局唯一实例的场景。

7. 记录类(Record Class)(Java 14+)

  • 定义:用 record 声明,不可变数据载体。
  • 特点
    • 自动生成 equals()hashCode()toString()
    • 所有字段默认为 final
  • 示例
    public record Person(String name, int age) {}
    
  • 场景:简化 DTO(数据传输对象)、不可变数据模型。

三、高级类与设计模式相关类

8. 密封类(Sealed Class)(Java 17+)

  • 定义:用 sealed 声明,限制继承范围。
  • 特点
    • 使用 permits 指定允许的子类。
    • 子类必须为 finalsealednon-sealed
  • 示例
    public abstract sealed class Shape permits Circle, Square {}
    public final class Circle extends Shape {}
    public non-sealed class Square extends Shape {}
    
  • 场景:固定类型层次结构(如表达式树节点)。

9. 功能接口(Functional Interface)

  • 定义:用 @FunctionalInterface 标记的接口,仅含一个抽象方法。
  • 特点
    • 支持 Lambda 表达式和方法引用。
    • 可包含默认方法和静态方法。
  • 示例
    @FunctionalInterface
    public interface Calculator { int calculate(int a, int b); }
    Calculator add = (a, b) -> a + b;
    
  • 场景:函数式编程(如 RunnableComparator)。

10. 工具类(Utility Class)

  • 定义:通过私有构造方法 + 静态方法实现。
  • 特点
    • 禁止实例化(私有构造方法)。
    • 所有方法为 static,无状态。
  • 示例
    public final class StringUtils {
        private StringUtils() {}
        public static boolean isEmpty(String str) { return str == null || str.trim().isEmpty(); }
    }
    
  • 场景:通用工具方法(如 MathCollections)。

11. 不可变类(Immutable Class)

  • 定义:对象状态创建后不可修改。
  • 实现
    • 所有字段 private final
    • 不提供 setter,返回深拷贝对象。
  • 示例
    public final class ImmutablePoint {
        private final int x, y;
        public ImmutablePoint(int x, int y) { this.x = x; this.y = y; }
        public int getX() { return x; }
        public int getY() { return y; }
    }
    
  • 场景:线程安全数据对象(如 StringLocalDate)。

12. 代理类(Proxy Class)

  • 定义:通过 Proxy 动态生成的类,拦截方法调用。
  • 特点
    • 基于接口动态创建。
    • 常用于 AOP(日志、事务管理)。
  • 示例
    Service proxy = (Service) Proxy.newProxyInstance(
        Service.class.getClassLoader(),
        new Class[] { Service.class },
        (proxy, method, args) -> {
            System.out.println("Before method");
            return method.invoke(target, args);
        }
    );
    
  • 场景:动态代理、远程方法调用(RMI)。

四、其他重要概念

13. POJO/Java Bean

  • 定义:普通类的子集,用于数据模型。
  • 特点
    • 包含无参构造方法 + getter/setter
    • 无业务逻辑,仅用于数据传输。
  • 示例
    public class User {
        private String name;
        public User() {}
        public String getName() { return name; }
        public void setName(String name) { this.name = name; }
    }
    

14. 注解类型(Annotation Type)

  • 定义:用 @interface 声明,标记元数据。
  • 示例
    public @interface MyAnnotation {
        String value() default "";
        int priority() default 0;
    }
    
  • 场景:框架标记(如 @Override@SpringBootApplication)。

总结表格:类类型对比

类型核心特点典型应用场景
普通类直接实例化,完整实现具体业务逻辑
抽象类部分实现,强制子类扩展通用模板设计
接口多继承行为规范,支持默认方法跨类共享行为(如排序、线程)
枚举类固定常量集合,实例化控制状态、类型定义
内部类封装外部类相关逻辑回调、事件处理
单例类全局唯一实例资源管理(如配置、连接池)
记录类(Java 14+)不可变数据载体,自动生成方法DTO、简化数据模型
密封类(Java 17+)限制继承范围固定类型层次结构
功能接口单一抽象方法,支持 Lambda函数式编程
工具类静态方法集合,禁止实例化通用工具方法
不可变类线程安全,状态不可变共享数据对象
代理类动态生成,拦截方法调用AOP、远程调用

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

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

相关文章

指定运行级别

linux系统下有7种运行级别,我们需要来了解一下常用的运行级别,方便我们熟悉以后的部署环境,话不多说,来看. 开机流程: 指定数级别 基本介绍 运行级别说明: 0:关机 相当于shutdown -h now ⭐️默认参数不能设置为0,否则系统无法正常启动 1:单用户(用于找回丢…

Python标准库:sys模块深入解析

sys模块是Python标准库中一个非常重要的内置模块,它提供了与Python解释器及其环境交互的多种功能。本文将深入探讨sys模块的各个方面,帮助开发者更好地理解和利用这个强大的工具。 1. sys模块概述 sys模块提供了对由解释器使用或维护的变量的访问&…

加油站小程序实战教程10开通会员

目录 1 修改用户登录逻辑2 创建变量3 调用API总结 我们上一篇搭建了开通会员的界面,有了界面的时候就需要加入一些逻辑来控制界面显示。我们的逻辑是当用户打开我的页面的时候,在页面加载完毕后调用API看用户是否已经开通会员了,如果未开通就…

没有他的“变换”,就没有今天的人工智能

从ChatGPT发布以来,大语言模型(LLM)是所有人追逐的方向,无论是将其看作“万能神”或是人工智能应用的基础构件,其重要性毋庸置疑。而随着大语言模型扩展到多模态领域,就需要更多的工具来帮助其进行处理。 例…

MCP 实战:实现server端,并在cline调用

本文动手实现一个简单的MCP服务端的编写,并通过MCP Server 实现成绩查询的调用。 一、配置环境 安装mcp和uv, mcp要求python版本 Python >3.10; pip install mcppip install uv 二、编写并启用服务端 # get_score.py from mcp.server.fastmcp import…

关于C++日志库spdlog

关于C日志库spdlog spdlog是一个高性能、易于使用的C日志库,广泛应用于现代C项目中。它支持多线程、异步日志记录、多种日志格式、以及灵活的输出方式(如控制台、文件、甚至自定义输出)。下面将就常用功能方面介绍spdlog的安装、配置和使用方…

回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测

回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测 目录 回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME…

液氮恒温器是做什么的

‌液氮恒温器‌是一种利用液氮作为冷源的恒温装置,主要用于提供低温、恒温或变温环境,广泛应用于科研、工业和医疗等领域。液氮恒温器通过液氮的低温特性来实现降温效果,具有效率高、降温速度快、振动小、成本低等优点。 液氮恒温器应用场景和…

`mpi4py` 是什么; ModuleNotFoundError: No module named ‘mpi4py

mpi4py 是什么 目录 `mpi4py` 是什么ModuleNotFoundError: No module named mpi4pyModuleNotFoundError: No module named mpi4py mpi4py 是一个 Python 模块,它提供了对 MPI(Message Passing Interface)标准的接口,使得 Python 程序能够利用 MPI 进行并行计算。其作用主要…

大数据 - 1. 概述

早期的计算机(上世纪70年代前) 是相互独立的,各自处理各自的数据上世纪70年代后,出现了基于TCP/IP协议的小规模的计算机互联互通。上世纪90年代后,全球互联的互联网出现。当全球互联网逐步建成(2000年左右&…

Java基础下

一、Map Map常用的API //map常用的api//1.添加 put: 如果map里边没有key&#xff0c;则会添加&#xff1b;如果有key&#xff0c;则会覆盖&#xff0c;并且返回被覆盖的值Map<String,String> mnew HashMap<>();m.put("品牌","dj");m.put("…

数据结构和算法(十二)--最小生成树

一、有向图 定义: 有向图是一副具有方向性的图&#xff0c;是由一组顶点和一组有方向的边组成的&#xff0c;每条方向的边都连着一对有序的顶点。 出度: 由某个顶点指出的边的个数称为该顶点的出度。 入度: 指向某个顶点的边的个数称为该顶点的入度。 有向路径: 由一系列顶点组…

TK广告素材优化:提升投放效果的核心策略

在广告投放领域&#xff0c;决定投放效果的三大关键要素是&#xff1a;产品、素材和人群。由于产品相对固定且人群多采用通投策略&#xff0c;因此素材质量成为影响投放效果的决定性因素。 为什么素材如此重要&#xff1f; 素材质量直接影响广告的点击率&#xff0c;进而影响…

8.3.1 MenuStrip(菜单)控件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 MenuStrip控件提供了程序窗体的主菜单&#xff0c;即显示于窗体顶端部分的菜单。 MenuStrip常用属性&#xff1a; ImageScalingSize…

STM32单片机入门学习——第29节: [9-5] 串口收发HEX数据包串口收发文本数据包

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.09 STM32开发板学习——第29节: [9-5] 串口收发HEX数据包&串口收发文本数据包 前…

Skyline配置指南-微信小程序

Skyline 是微信小程序推出的新一代渲染引擎&#xff0c;提供了更强大的渲染能力和更流畅的性能体验。以下是配置 Skyline 的详细步骤&#xff1a; 一、app.json文件配置 "componentFramework": "glass-easel", "lazyCodeLoading": "requi…

Spring MVC 重定向(Redirect)详解

Spring MVC 重定向&#xff08;Redirect&#xff09;详解 1. 核心概念与作用 重定向&#xff08;Redirect&#xff09; 是 Spring MVC 中一种客户端重定向机制&#xff0c;通过 HTTP 302 状态码&#xff08;默认&#xff09;将用户浏览器重定向到指定 URL。 主要用途&#xf…

window上 docker使用ros2开发并usbip共享usb设备

曾经参考 https://blog.csdn.net/laoxue123456/article/details/138339029 来共享windows上的usb 发现没有办法成功总是出现 tcp 错误。telnet测试能够正常连接 很是奇怪&#xff0c;window上换成低版本的usbipd仍然是同样的错误&#xff0c;没有办法的情况下参考了docker官方文…

基于MATLAB/simulink的信号调制仿真--AM调制

实验内容&#xff1a; 假设y(t)(20.5*2cos&#xff08;2*pi*1000*t&#xff09;)*5cos&#xff08;2*pi*2*1e4*t&#xff09;调幅系统&#xff0c;请将一个频率为1000HZ的余弦波信号&#xff0c;通过进行AM调制&#xff0c;载波信号频率为20kHZ的余弦波&#xff0c;调制度ma0.…

Vue3+Ts封装ToolTip组件(2.0版本)

本组件支持hover和click两种触发方式&#xff0c;需要更多的触发方式&#xff0c;可自行去扩展&#xff01;&#xff01;&#xff01; 1.传递三个参数&#xff1a; content&#xff1a;要展示的文本 position&#xff1a;文本出现的位置&#xff08;"top" | "t…