用Java覆盖用户库类
我使用BlueJ for Mac编写java代码。 我添加了stdlib.jar库(来自princeton http://introcs.cs.princeton.edu/java/stdlib/ )。 在添加这个库之前,我有自己的类名为StdDraw.java(我在项目中使用的特定类)并复制/粘贴代码。 我还调整了一些代码并添加了一些新行。 由于我无法编辑库代码,我如何覆盖或扩展库类以添加其他function?
由于库类是final
,因此无法扩展它们。 另一个选择是将它们包装在您自己的类中。 例如,您可以创建自己的绘图类,其中包含它委派给的StdDraw
实例。 对于许多方法,您只需调用StdDraw
实例的相应方法,或者您可以通过自己实现方法来模拟覆盖。
只需简单地扩展课程,
public MyClass extends ClassFromLib
确保库jar文件在类路径上。 如果该类的作者将其声明为final,表明它不适合子类化。 那么最好的选择是使用委托模式。
我在这个编辑器中编写了下面的代码,所以没有它符合的承诺,但希望你能得到这个想法。
public Myclass { private ClassFromLib cfl = new ClassFromLib(); public void methodA(){ //Do whatever you need here cfl.methodA(); //Doesn't have to be the same name. //Do whatever you need here } }