将派生类传递给需要重写期望基类的方法

本教程将介绍将派生类传递给需要重写期望基类的方法的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

将派生类传递给需要重写期望基类的方法 教程 第1张

问题描述

我有一个 A 类,有一个抽象方法 doAction(BaseClass obj) 需要一个 BaseClass 类型的参数

public class A {
 //....
 abstract void doAction(BaseClass obj);
 //....
}

现在,我有另一个类 B 需要扩展 A.但是,B 的 doAction 方法需要使用扩展 BaseClass 的对象 DerivedClass.

public class B extends class A {
  //..
  void doAction(DerivedClass obj) {
 obj.callMethodAvailableOnlyInDerivedClass();
}

 }

如果我需要将 DerivedClass 类型的参数传递给需要 BaseClass 的方法,我该怎么处理?

谢谢!

推荐答案

你让基类泛型:

public class A<T extends BaseClass> {
 //....
 abstract void doAction(T obj);
 //....
}

以及用派生类参数化的子类:

public class B extends A<DerivedClass> {
  //..
  void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
  }
}

没有泛型,这是不可能的,因为 B 会违反 A 的合同:A 接受任何类型的 BaseClass,但您限制 B 只接受特定的子类.这不尊重 Liskov 原则.

好了关于将派生类传递给需要重写期望基类的方法的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。