アダプタモードでインタフェースの不足を解決


解決策は、EntityModelでimplements Ibodyinfoを使用しないことです.getAdapterメソッドを実装します.
public Object getAdapter(Class adapter){
        if(adapter==Ibodyinfo.class)
            return new BodySource(this);
        return null;
    }

BodySourceのコードは以下の通りです.
package com.wjy.understandinterface;

public class BodySource implements Ibodyinfo {
    EntityModel model;
    public BodySource(EntityModel model) {
        this.model = model;
    }
    @Override
    public double getHeight() {
        // TODO Auto-generated method stub
        return model.height;
    }

    @Override
    public double getWeight() {
        // TODO Auto-generated method stub
        return model.weight;
    }

}

これにより、Main関数でheightとweightの情報を取得できます.
 
Ibodyinfo bodyinfo=(Ibodyinfo)((new EntityModel("wangjiyuan",22,177.00,74.00)).getAdapter(Ibodyinfo.class));    
bodyinfo.getHeight();
bodyinfo.getWeight();

以上(new EntityModel(「wangjiyuan」,22177.00,74.00)).getAdapter(Ibodyinfo.class)が実行されるとBodySourceのオブジェクトが返され、BodySourceはIbodyinfoインタフェースを実装するので、インタフェースリファレンスが実装するクラスを指すオブジェクトと同様にIbodyinfoに変換できます.処理heightとweightのコードをBodySourceクラスに入れることに相当し、BodySourceとEntityModelは集約関係であり、
return new BodySource(this);のthisは、Bodysourceで集約されたEntityModelリファレンスにEntity Modelオブジェクトを渡します.