避免对包含相同方法的不同类型的类的多个定义

时间:2015-04-13 19:38:56

标签: java

我有2个课程:

public class A {
    private String label;

    public String getLabel() {
        return label;
    }
}

public class B {
    private String label;

    public String getLabel() {
        return label;
    }
}

然后我有另一个类,我想访问这些类的标签值:

public class C {
    private String label;

    public C(A object) {
        label = object.getLabel();
    }
}

例如,上面的定义仅适用于A.我希望能够将A或B传递给C的构造函数。我能想到的最接近的事情是使C成为泛型类,但后来我失去了对getLabel()的访问权限。我怎么能继续这个呢?我觉得这是一个基本的设计模式,但由于我是Java的新手,我不知道从哪里开始。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

您可以创建interface并同时让AB实现它:

interface HasLabel {
    String getLabel();
}

然后

public class A implements HasLabel { ... }

public class B implements HasLabel { ... }

C

public class C {
    private String label;

    public C(HasLabel object) {
        label = object.getLabel();
    }
}

执行C(HasLabel object)时,您保证可以在参数上调用getLabel(),因此您可以object.getLabel()执行此操作。

答案 1 :(得分:2)

在Java中使用继承和多态非常简单:

这是一个实现常见行为的抽象基类:

public abstract class Base {
    private String label;

    public String getLabel() {
        return label;
    }
}

ABBase的子类并继承了他们的行为:

public class A extends Base {
    // specific fields / methods of class A
}

public class B extends Base {
    // specific fields / methods of class B
}

您现在可以使用基本类型AB中使用CBase的实例:

public class C {
    private String label;

    public C(Base object) {
        label = object.getLabel();
    }
}

E.g:

A a = new A();
B b = new B();

C c1 = new C(a);
C c2 = new C(b);