当前位置: 首页 > news >正文

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

目录

  • 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.dtcms.com/a/121937.html

相关文章:

  • 【PVR】《Palm Vein Recognition and Large-scale Research based on Deep Learning》
  • 今日行情明日机会——20250409
  • P9242 [蓝桥杯 2023 省 B] 接龙数列
  • Anacond虚拟环境里安装GPU版本Pytorch
  • linux下截图工具的选择
  • Linux权限管理:从入门到实践
  • 网页部署到宝塔服务器上,发送请求报错?org.springframework.data.redis.RedisSystemException,让我来看看
  • 算法训练之动态规划(一)
  • 为什么在Altium原理图中画线会自动链接到附近?
  • Zephyr、FreeRTOS、RT-Thread 定时器区别分析
  • 【Ragflow】14.MinerU解析脚本,接入ragflow知识库
  • Windows 图形显示驱动开发-WDDM 2.0功能_供应和回收更改
  • Seq2Seq - GRU补充讲解
  • DP_AUX辅助通道介绍
  • Testbench设计
  • 起跑有几种起跑方式·棒球1号位
  • 【嵌入式系统设计师】知识点:第11 章 嵌入式系统设计案例分析
  • MQ保证消息幂等
  • (四十一)Dart 中的空安全与 `late` 关键字教程
  • 网络基础-路由技术和交换技术以及其各个协议
  • 每日算法-250409
  • 智能体:重塑未来的智能助手及其在产品设计中的应用
  • 逻辑分析仪怎么用?怎么看PWM(以Saleae为例)​
  • TQTT_KU5P开发板教程---DDR4基于IP核 SDRAM(MIG)的测试
  • 接口测试性能指标:QPS、TPS、OTPS、TP99
  • 【深度学习基础】Temporal Fusion Transformer
  • TCP转发隧道
  • Go并发背后的双引擎:CSP通信模型与GMP调度|Go语言进阶(4)
  • K8S学习之基础七十九:关闭istio功能
  • 【c语言】倒置字符串