java - 基类派生类的设计问题
ringa_lee
ringa_lee 2017-04-17 17:32:22
[Java讨论组]

由于业务需求,现有

基类A,派生类A1、A2
基类B,派生类B1、B2

目前是基类A持有基类B,但是业务上需要A1持有B1,A2持有B2,怎样设计会比较好?

谢谢

ringa_lee
ringa_lee

ringa_lee

全部回复(5)
巴扎黑

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

PHPz

给你一个参考方案,另外也可以考虑用泛型来处理。不管 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);
    }
}
PHP中文网

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

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{}
PHPz

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

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这边不需要继承结构。

大家讲道理

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号