我有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的新手,我不知道从哪里开始。非常感谢任何帮助。
答案 0 :(得分:5)
您可以创建interface并同时让A
和B
实现它:
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;
}
}
A
和B
是Base
的子类并继承了他们的行为:
public class A extends Base {
// specific fields / methods of class A
}
public class B extends Base {
// specific fields / methods of class B
}
您现在可以使用基本类型A
在B
中使用C
和Base
的实例:
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);