两个扩展类,具有相互继承的对象,最佳实践?

时间:2017-01-19 19:07:45

标签: java interface abstract extends

我想优化使用的代码" BDTO扩展ADTO"而不是复制方法any()在DForm和EForm中创建一个新的类抽象(CForm)以及在哪里放置逻辑方法any()

如何解决重复方法?最佳实践如何?

public class ADTO {

    public String a;

    public String getA() {return a;}

    public void setA(String a) {this.a = a;}
}



public class BDTO extends ADTO{

    public String b;

    public String getB() {return b;}

    public void setB(String b) {this.b = b;}
}

public abstract class CForm {

    ADTO aDTO;

    //  BDTO bDTO;

    public ADTO getADTO() {return aDTO;}

    public void setADTO(ADTO aDTO){this.aDTO = aDTO;}

    //  public BDTO getbDTO() {return bDTO;}

    //  public void setbDTO(BDTO bDTO) {this.bDTO = bDTO;}


    public void any() {//
        aDTO.getA();    //
    }                   //
                        // how resolve duplicate method ?
    //public void any(){    // when i use only attribute aDTO and run any1() in EForm, aDTO is null
    //  bDTO.getA();    //
    //}

}

public class DForm extends CForm {

    public void anyD(){

        getADTO().setA("test");
        any(); // run method here is ok
    }

}


public class EForm extends CForm{

    //form using here any() and BDTO
    public void anyE(){
        getADTO().setA("test");
        any(); //run method here aDTO is null, why?
    }

}

1 个答案:

答案 0 :(得分:0)

Java不允许重复的方法(至少不是你想要的)。

你可以做些什么(我认为这就是你的意图):你可以制作一个any()方法随机调用aDTO.getA()bDTO.getB()或选择任何可用的方法并运行那一个。

你的any()方法看起来像这样(随机):

public void any() {
    if(new Random().nextBoolean())
        aDTO.getA();
    else
        bDTO.getB();
}

或者像这样(第一次可用):

public void any() {
    if(aDTO != null)
        aDTO.getA();
    else if(bDTO != null)
        bDTO.getB()
}