don*_*ton 2 java polymorphism inheritance multiple-inheritance superclass
我知道Java禁止从多个类继承并允许实现任意数量的接口.但是,虽然接口适用于多态,但它们不能包含其子类可能要共享的任何实际代码.如果我有两个不同的超类具有我想在子类中使用的共享代码,该怎么办?
示例:在我的程序中,有两个超类,一个使用HashMaps,另一个使用Strings,并且都有直接子类,一切都很好.但是现在我有第三个需要两个超类的共享功能,但它只能扩展一个.有没有一种简单的方法来重新设计这个类结构,而不必复制很多代码?
JB *_*zet 12
使用委托而不是继承:
public class Third implements FirstInterface, SecondInterface {
private First first;
private Second second;
public void foo() {
first.foo();
}
public String bar() {
return second.bar();
}
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了这一点
创建一个实现接口的类,然后将所有调用委托给实际的对象
public interface IFirst { public void foo(); }
public interface ISecond { public void bar(); }
public class Third implements IFirst, ISecond {
private IFirst first;
private ISecond second;
public Third(IFirst first, ISecond second) {
this.first = first;
this.second = second;
}
@Override
public void foo() {
first.foo();
}
@Override
public String bar() {
return second.bar();
}
}
Run Code Online (Sandbox Code Playgroud)这不会让您访问类heirarchy中受保护的成员.如果这就是你要找的东西,那你在Java中运气不好.但是,这将允许您使用多态方式将此对象称为IFirst和ISecond.因此,您将能够在需要两种类型之一的外部代码中访问它.
注意:我偷了JB的命名.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |