java - 实现相同接口(interface)的多个类的相同方法

标签 java interface abstract-class

抱歉,我真的不知道如何给问题起标题,这就是问题所在......

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

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 静态化,这样我就不必创建新实例了

有更好的想法?

最佳答案

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

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;
 }
}

关于java - 实现相同接口(interface)的多个类的相同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596352/

相关文章:

java - 安装4j 7.0.6 : Cancel installation from "Replacement script for language code"

java - 使用 Java 在 PostgreSQL 中存储时间的最推荐方法是什么?

c# - 接口(interface)实现及常用功能

c# - 在 Inherited Class Constructor C# 中强制部分基初始化(和方法)(就像抽象对方法所做的那样)——解决这个问题

java - 使用 avro-maven-plugin 1.9.0 生成具有十进制数据类型的类

java - 如何使用 Java 正确地从套接字流式传输数据

c# - 如何在 C# 中处理组合类

java - 当将数据结构声明为其接口(interface)然后对其进行强制转换时,Java 是否将详细信息存储在某处

c# - 在复杂的对象结构中创建类的只读版本

c# - 检测损坏的图像文件