Java 如何重写方法或为库类指定参数值?

Java 如何重写方法或为库类指定参数值?,java,jar,overriding,shared-libraries,Java,Jar,Overriding,Shared Libraries,我正在使用某个库(包括使用jar文件)开发一个java应用程序,我希望覆盖该库中包含的类(抽象类)上存在的方法,甚至更改其中的某个参数值。 有没有办法做到这一点?扩展要从中重写该方法的类 public class ClassFromExtLib { public void foo(Object param) { } } public class MyClass extends ClassFromExtLib { @Override public void foo

我正在使用某个库(包括使用jar文件)开发一个java应用程序,我希望覆盖该库中包含的类(抽象类)上存在的方法,甚至更改其中的某个参数值。
有没有办法做到这一点?

扩展要从中重写该方法的类

public class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass extends ClassFromExtLib {
    @Override
    public void foo(Object param) {
         super.foo(param);
         //adding my own implementation...
    }
}
如果无法扩展该类,请使用可以执行该方法的包装器类,然后向其中添加您自己的逻辑

public final class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass {
    //code to initialize the instance of the class ommited
    private ClassFromExtLib bar;

    public void foo(Object param) {
         bar.foo(param);
         //adding my own implementation...
    }

    public void foo(Object param, Object param2) {
         bar.foo(param);
         //adding my own implementation using param and param2...
    }
}

如果要从方法中添加/删除参数,则不能通过重写来完成,这是一种重载。第二种方法最适合您。

扩展要从中重写该方法的类

public class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass extends ClassFromExtLib {
    @Override
    public void foo(Object param) {
         super.foo(param);
         //adding my own implementation...
    }
}
如果无法扩展该类,请使用可以执行该方法的包装器类,然后向其中添加您自己的逻辑

public final class ClassFromExtLib {
    public void foo(Object param) {
    }
}

public class MyClass {
    //code to initialize the instance of the class ommited
    private ClassFromExtLib bar;

    public void foo(Object param) {
         bar.foo(param);
         //adding my own implementation...
    }

    public void foo(Object param, Object param2) {
         bar.foo(param);
         //adding my own implementation using param and param2...
    }
}

如果要从方法中添加/删除参数,则不能通过重写来完成,这是一种重载。第二种方法最适合您。

是和否。您可以创建一个具有所需不同行为的子类

public class MyVersion extends JarVersion {
但是,如果更改签名,调用方通常会忽略更改。 您还可以使用委托模式

public MyClass {
  JarClass delegate;

  public void myMethod(MyParm mp) {
    JarParm jp = makeJPfromMP(mp);
    extraStuff();
    delegate.originalMethod(jp);
    moreExtraStuff();
  }

是和否。您可以创建一个具有所需不同行为的子类

public class MyVersion extends JarVersion {
但是,如果更改签名,调用方通常会忽略更改。 您还可以使用委托模式

public MyClass {
  JarClass delegate;

  public void myMethod(MyParm mp) {
    JarParm jp = makeJPfromMP(mp);
    extraStuff();
    delegate.originalMethod(jp);
    moreExtraStuff();
  }
很简单,

只需创建另一个类来扩展需要修改的类(假设其可扩展)

然后重写要更改的方法。

这很简单

只需创建另一个类来扩展需要修改的类(假设其可扩展)


然后重写要更改的方法。

如果允许,可以尝试扩展该类。这就是继承的意义所在。如果允许,您可以尝试扩展该类。这就是继承的意义所在。