面试题答案
一键面试思路阐述
- 泛型:通过泛型可以定义在不同类型上都能工作的类、接口和方法,从而实现代码的复用,同时编译器在编译期确保类型安全。
- 多态:利用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
类及其子类Dog
和Cat
:
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>
集合可以存储Dog
和Cat
对象,因为它们都是Animal
类型的(通过继承实现多态)。通过遍历这个集合,我们可以调用每个对象的makeSound
方法,每个对象会根据自己的类型做出相应的响应,同时编译器确保类型安全,因为集合被声明为List<Animal>
。