Java泛型继承与接口约束:无需修改PriorityQueue实现SpecialPriorityQueue
有,完全不需要修改原有PriorityQueue类的代码即可实现,具体方案如下:
实现方案
1. 泛型边界约束实现
Java 泛型允许子类的泛型参数比父类设置更严格的上界,你只需要在定义SpecialPriorityQueue时给泛型T加上指定接口的上界约束即可,语法示例:
// 把CustomInterface替换为你实际要求T实现的接口名即可 public class SpecialPriorityQueue<T extends CustomInterface> extends PriorityQueue<T> { // 类内部实现 }
2. 父类protected成员访问与方法重写
- 按照Java的访问修饰符规则,子类天然有权限访问父类声明为
protected的字段和方法,不需要调整父类的修饰符,也不需要两个类处于同一个包下。 - 只要父类中你需要重写的方法没有被
final修饰,直接在子类中定义相同方法签名的实现即可完成重写。
完整示例代码
假设你要求SpecialPriorityQueue的泛型参数必须实现PriorityComparable接口,完整实现示例如下:
首先是约束接口定义:
public interface PriorityComparable { int getPriorityValue(); }
队列子类实现:
public class SpecialPriorityQueue<T extends PriorityComparable> extends PriorityQueue<T> { @Override public boolean add(T element) { // 可直接访问父类protected字段,比如假设父类有protected的List<T> heap存储元素 // 自定义插入逻辑 if (element.getPriorityValue() < 0) { throw new IllegalArgumentException("非法优先级"); } return super.add(element); } // 其他需要重写的方法同理实现 }
内容的提问来源于stack exchange,提问作者BestOrNothing
相关产品推荐
相关产品推荐

