找回密码
 立即注册
首页 业界区 安全 Java 中的 实现、泛型

Java 中的 实现、泛型

殳世英 3 小时前
上次我们聊了 Java 面向对象的三大特性,封装、继承、多态。今天我们来聊聊 实现、泛型
一、实现(implements)
定义:"实现" 是 Java 中类与接口(Interface) 之间的关系,关键字是 implements。接口是一组 "行为规范"(只定义方法签名,不包含具体实现),而实现类需要兑现这些规范,即编写接口中所有抽象方法的具体逻辑。
类比:接口 = 一份 "合同"(比如 Runnable 接口规定 "必须有 run () 方法"),实现类 = 签约方(比如 MyThread 类实现 Runnable,必须写 run () 的具体代码,兑现合同)。
作用:

  • 弥补 Java 单继承的不足:一个类只能继承 1 个父类,但 可以实现多个接口(比如class A extends B implements C, D),实现 "多继承" 的效果;
  • 定义行为标准:接口封装 "能做什么",实现类负责 "怎么做",解耦行为规范和具体实现;
  • 接口多态的核心基础。
示例代码:
  1. // 1. 定义接口:封装行为规范(只有方法签名,无实现)
  2. public interface AnimalBehavior {
  3.     // 抽象方法:无方法体
  4.     void eat();
  5.     void move();
  6.    
  7.     // 默认方法(JDK8+):有默认实现,实现类可重写
  8.     default void breathe() {
  9.         System.out.println("动物呼吸空气");
  10.     }
  11. }
  12. // 2. 实现类:必须实现接口的所有抽象方法
  13. public class Dog1 implements AnimalBehavior {
  14.     @Override
  15.     public void eat() {
  16.         System.out.println("狗啃骨头");
  17.     }
  18.     @Override
  19.     public void move() {
  20.         System.out.println("狗跑");
  21.     }
  22.     // 可选:重写接口的默认方法
  23.     @Override
  24.     public void breathe() {
  25.         System.out.println("狗用鼻子呼吸");
  26.     }
  27.     public static void main(String[] args) {
  28.         Dog1 dog1 = new Dog1();
  29.         dog1.eat();    // 输出:狗啃骨头
  30.         dog1.move();   // 输出:狗跑
  31.         dog1.breathe();// 输出:狗用鼻子呼吸
  32.     }
  33. }
复制代码
二、泛型(Generics)
定义:参数化类型 —— 允许在定义类、接口、方法时使用 "类型参数",编译时指定具体类型,从而实现类型安全和代码复用。
类比:快递箱(泛型类)可以装任何物品(类型参数),你在使用时指定装 "书籍"(String)或 "电子产品"(Integer),箱子就只接受对应类型,避免装错。
作用:

  • 类型安全:编译时检查类型,避免运行时 ClassCastException(强制类型转换异常);
  • 代码复用:一套代码支持多种类型,无需为不同类型重复编写;
  • 消除冗余的强制类型转换。
泛型类 示例:
  1. // 自定义泛型类:Box<T>,T是类型参数(可以任意命名,常用T/E/K/V)
  2. public class Box<T> {
  3.     private T content;
  4.     // 泛型方法:设置内容
  5.     public void setContent(T content) {
  6.         this.content = content;
  7.     }
  8.     // 泛型方法:获取内容
  9.     public T getContent() {
  10.         return content;
  11.     }
  12.     // 测试泛型类
  13.     public static void main(String[] args) {
  14.         // 1. 指定T为String类型
  15.         Box<String> stringBox = new Box<>();
  16.         stringBox.setContent("Hello 泛型");
  17.         String str = stringBox.getContent(); // 无需强制转换
  18.         System.out.println(str); // 输出:Hello 泛型
  19.         // 2. 指定T为Integer类型
  20.         Box<Integer> integerBox = new Box<>();
  21.         integerBox.setContent(100);
  22.         Integer num = integerBox.getContent();
  23.         System.out.println(num); // 输出:100
  24.         // 3. 类型安全:编译时检查,避免装错类型
  25.         // stringBox.setContent(100); // 编译错误:不能将Integer赋值给String类型的Box
  26.     }
  27. }
复制代码
泛型方法(独立于类的泛型)示例:
  1. public class GenericMethodDemo {
  2.     // 泛型方法:<T>是方法的类型参数,T[]是参数类型,T是返回类型
  3.     public static <T> T getFirstElement(T[] array) {
  4.         if (array == null || array.length == 0) {
  5.             return null;
  6.         }
  7.         return array[0];
  8.     }
  9.     public static void main(String[] args) {
  10.         String[] strArray = {"Java", "泛型", "教程"};
  11.         Integer[] intArray = {1, 2, 3, 4};
  12.         // 调用泛型方法,自动推断类型
  13.         String firstStr = getFirstElement(strArray);
  14.         Integer firstInt = getFirstElement(intArray);
  15.         System.out.println(firstStr); // 输出:Java
  16.         System.out.println(firstInt); // 输出:1
  17.     }
  18. }
复制代码
<strong>泛型通配符(、:表示任意类型(只读,不能添加元素)    public static void printList(List list) {        for (Object obj : list) {            System.out.print(obj + " ");        }        System.out.println();    }    // 上限通配符        printList(dogs); // 输出:Dog2@6f496d9f - 旺财        printList(cats); // 输出:Cat@723279cf - 咪宝        // 上限通配符

相关推荐

您需要登录后才可以回帖 登录 | 立即注册