重写实例化 Java 对象中的方法

2022-09-01 05:23:21

我想重写一个对象中的方法,该对象是由我几乎无法控制的工厂交给我的。

我的具体问题是,我想覆盖 Socket 对象getInputStreamgetOutputStream 来执行连线记录

一般问题如下:

public class Foo {
    public Bar doBar() {
        // Some activity
    }
}

我想进行实例化并将其替换为我自己的实例化,其工作方式如下:FoodoBar

Bar doBar() {
    // My own activity
    return original.doBar();
}

对于套接字,我将返回一个输入流输出流,它们通过日志记录来截获数据。


答案 1

由于Java使用基于类的OO,这是不可能的。您可以做的是使用装饰器模式,即为返回包装流的对象编写包装器。


答案 2

我认为有一种方法可以达到你想要的效果。我看到它通常与按钮一起使用,以允许程序员在单击按钮时执行某些操作。

假设你有你的Foo类:

public class Foo {
  public Bar doBar() {
    // Some activity
  }
}

然后你有一个跑步者类或类似的东西。您可以在实例化时重写 doBar() 方法,它只会影响该特定对象。

该类可能如下所示:

public class FooInstance{
  Foo F1 = new Foo(){
    public Bar doBar(){
      //new activity
    }
  }

  Foo F2 = new Foo();

  F1.doBar(); //does the new activity
  F2.doBar(); //does the original activity found in the class
}

我不完全确定这能帮你解决问题,但也许它会让你朝着正确的方向前进。如果没有别的,可以重写类外的方法,也许这会对你有所帮助。