MST

星途 面试题库

面试题:Java多态在泛型与集合框架中的通用代码编写应用

在Java的泛型和集合框架中,如何利用多态来编写通用代码以处理不同类型的元素,同时保证类型安全?请详细阐述思路,并给出具体代码示例,包括自定义泛型类、泛型方法以及如何在集合中使用多态。
18.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

思路阐述

  1. 泛型:通过泛型可以定义在不同类型上都能工作的类、接口和方法,从而实现代码的复用,同时编译器在编译期确保类型安全。
  2. 多态:利用Java的继承和接口实现机制,不同类型的对象可以对相同的方法做出不同的响应。在泛型和集合框架中,多态允许我们以统一的方式处理不同类型的对象,只要这些对象继承自相同的基类或实现相同的接口。

自定义泛型类示例

class Box<T> {
    private T item;

    public Box(T item) {
        this.item = item;
    }

    public T getItem() {
        return item;
    }
}

这个Box类是一个简单的泛型类,它可以存储任何类型T的对象。

泛型方法示例

class GenericMethods {
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.print(element + " ");
        }
        System.out.println();
    }
}

printArray方法是一个泛型方法,它可以打印任何类型数组的元素。

在集合中使用多态示例

假设我们有一个继承体系,例如Animal类及其子类DogCat

class Animal {
    public void makeSound() {
        System.out.println("Some animal sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}

class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow!");
    }
}

我们可以在集合中利用多态和泛型来处理不同类型的动物:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Animal> animals = new ArrayList<>();
        animals.add(new Dog());
        animals.add(new Cat());

        for (Animal animal : animals) {
            animal.makeSound();
        }
    }
}

在这个例子中,List<Animal>集合可以存储DogCat对象,因为它们都是Animal类型的(通过继承实现多态)。通过遍历这个集合,我们可以调用每个对象的makeSound方法,每个对象会根据自己的类型做出相应的响应,同时编译器确保类型安全,因为集合被声明为List<Animal>