对于实现相同接口的多个类,使用相同的方法

2022-09-03 15:06:01

对不起,我真的不知道如何命名这个问题,这就是问题所在......

我有一个接口和多个实现接口的类。接口中某些方法的实现在每个实现类中都完全相同。我觉得应该有一种方法可以简化这一点,这样我就不必每次都写相同的代码。例:

public interface Foo {
    String getName();
}

public class FooImpl1 implements Foo {
    private String name = "foo name1";

    public String getName() {
        return name;
    }
}

public class FooImpl2 implements Foo {
    private String name = "foo name2";

    public String getName() {
        return name;
    }
}

所以要分解..

  1. 有没有办法将getName的代码放在一个地方,每个类都有自己的名称变量?

  2. 有没有办法使getName成为静态的,这样我就不必创建新实例

有更好的想法?


答案 1

使用抽象类并在构造函数中初始化字段:

public abstract class Foo {

 protected String name;

 String getName() {
  return name;
 }
}

public class FooImpl1 extends Foo {

 public FooImpl1 () {
  name = "foo name1";
 }
}

public class FooImpl2 extends Foo {

 public FooImpl1 () {
  name = "foo name2";
 }
}

JB Nizlet指出,做这样的事情会更干净:

public abstract class Foo {

protected String name;

public Foo(String newName) {
    name = newName;
}

 String getName() {
  return name;
 }
}

然后调用子类。super("foo name 1")

正如@Peter Lawrey所说,如果你已经有了一个接口,或者出于其他原因想要一个接口:

public interface IFoo {
 String getName();
}

public abstract class Foo implements IFoo {

 protected String name;

 String getName() {
  return name;
 }
}

答案 2

你可以采取一个非常简单的方法:

public interface Foo {

    String getName();
}

public class Named implements Foo {

    String name;

    public String getName() {
        return name;
    }
}

public class FooImpl1 extends Named {
    {name = "foo name1";}
}

public class FooImpl2 extends Named {
    {name = "foo name2";}
}