为了账号安全,请及时绑定邮箱和手机立即绑定

基类派生类的设计问题

基类派生类的设计问题

侃侃无极 2019-03-29 19:15:45
由于业务需求,现有基类A,派生类A1、A2基类B,派生类B1、B2目前是基类A持有基类B,但是业务上需要A1持有B1,A2持有B2,怎样设计会比较好?谢谢
查看完整描述

6 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

根据业务功能拆分出接口来


查看完整回答
反对 回复 2019-04-17
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

给你一个参考方案,另外也可以考虑用泛型来处理。不管 Java 的泛型我不太熟,等其他高人了


class B {}

class B1 extends B {}

class B2 extends B {}


class A {

    B data;

    B getData() {

        return data;

    }

    void setData(B b) {

        data = b;

    }

}


class A1 extends A {

    B1 data;

    B1 getData() {

        return (B1) super.getData();

    }

    void setData(B1 b) {

        super.setData(b);

    }

    void setData(B b) {

        if (!(b instanceof B1)) {

            throw new ClassCastException();

        }

        super.setData(b);

    }

}


查看完整回答
反对 回复 2019-04-17
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

这个采用泛型可以很好地解决问题


class A<T extends B> {

    private T b;

    public T getB() {

        return b;

    }

}


class B {

    

}


class A1 extends A<B1>{

    

}


class B1 extends B{}


class A2 extends A<B2>{}


class B2 extends B{}


查看完整回答
反对 回复 2019-04-17
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

不知道这个是不是你要的:


public class B {

}

public class B1 extends B {

}

public class B2 extends B {

}

public class A <T extends B> {

    private T data;

    public T getData(){ return data;}


    public void setData(T data) {

        this.data = data;

    }

}


public class Main {

    public static void main(String[] args) {

        A<B1> a1 = new A<B1>();

        A<B2> a2 = new A<B2>();

        a1.setData(new B1());

        a2.setData(new B2());

        // .....

    }

}

使用泛型,A这边不需要继承结构。


查看完整回答
反对 回复 2019-04-17
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

按楼上的范型吧,不过也要注意范型的问题~~


查看完整回答
反对 回复 2019-04-17
  • 6 回答
  • 0 关注
  • 528 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信