如何设计类与类之间的关系

发布于 2022-09-01 06:13:39 字数 162 浏览 30 评论 0

如何设计类与类之间的关系:
比如
A类(人类)<-(玩法)-> B类(扑克),
A类(人类)<-(操作)-> C类(汽车),
A类(人类)<-(使用)-> D类(椅子)

像这种同一个类与其他不同类之间又有关联,怎么设计呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

窗影残 2022-09-08 06:13:39

其实分类,主要还是要看你准备抽象到什么地步。
举个例子,问题说道了"玩法","操作","使用",他们都可以抽象成“方法”,只不过是不同的应用而已
"扑克","汽车","椅子",这些都是需要用到的东西,把它们抽象成“物件”

下面为了方便理解我用的名字基本都是中文,其实学OO的概念,不要把它学死,下边的使用只是一种方式,从不同的角度去看去抽象,能写出各种各样的东西。

比如说:下边我把怎么使用这个东西的方法写在了“人类”里,但你想想,也许应该是“人类”拿到了这样东西就会用了而不是我告诉“人类”怎么用,又或者说这个东西它能这样用,而不是人类只会这么用。

理解的是OO的概念,帮助你将来去更有效更便利的写code就可以了。

public class 物件 {

    private String 名字;

    public 物件(String 名字){
        this.名字 = 名字;
    }

    public String get名字() {
        return 名字;
    }

    public void set名字(String 名字) {
        this.名字 = 名字;
    }
}

public class 方法 {

    private String 名字;

    public 方法(String 名字) {
        this.名字 = 名字;
    }

    public String play() {
        return 名字;
    }

    public String get名字() {
        return 名字;
    }

    public void set名字(String 名字) {
        this.名字 = 名字;
    }
}
public class 人类 {

    private String 名字;
    private 物件 东西;
    private 方法 使用;

    public 人类(String 名字 , 物件 东西, 方法 使用) {
        this.名字 = 名字;
        this.东西 = 东西;
        this.使用 = 使用;
    }

    public void apply() {
        System.out.println(get名字() + " " + get使用().get名字() + " " + get东西().get名字());
    }

    public 物件 get东西() {
        return 东西;
    }

    public void set东西(物件 东西) {
        this.东西 = 东西;
    }

    public 方法 get使用() {
        return 使用;
    }

    public void set使用(方法 使用) {
        this.使用 = 使用;
    }

    public String get名字() {
        return 名字;
    }

    public void set名字(String 名字) {
        this.名字 = 名字;
    }
}
public class Test {

    public static void main(String[] args) {
        人类 a = new 人类("A", new 物件("扑克"), new 方法("玩法"));
        a.apply();
        人类 b = new 人类("B", new 物件("汽车"), new 方法("操作"));
        b.apply();
        人类 c = new 人类("C", new 物件("椅子"), new 方法("使用"));
        c.apply();
    }
}
望她远 2022-09-08 06:13:39

定义一个接口

javapublic interface Use {
    public void useBy(Person p);
}

为BCD定义一个父类,实现接口Use

javapublic class Item implements Use {

    @Override
    public void useBy(Person p) {
        //do something
    }
}

BCD类继承类Item,并覆盖useBy方法(或者重载?比如扑克有多人玩)

面向对象学的不好,抛砖引玉了~

(り薆情海 2022-09-08 06:13:39

从你的例子来看,关联只是在A类对其他类有“行为”的时候发生?还是我没理解好?
若如你提问的那样,一个“类”对“另一类”实施某“行为”的关联就是以下这样解释

人类.玩(扑克) or 人类.玩(游戏机)
人类.驾驶(汽车) or 人类.驾驶(飞机)
人类.坐(椅子) or 人类.捡起(椅子)

其实这里把 人类 抽象成实施者实施者行为可操作对象。
再来就是对象,我们有 扑克、游戏机、汽车、飞机、椅子 这么多个,但是实施者行为并不是都可以操作全部对象,如:人类.驾驶(扑克)。所以行为需要限制操作对象,而对象也需要分类。

扑克、游戏机 继承 娱乐用品
汽车、飞机 继承 交通工具
椅子、娱乐用品、交通工具 继承 物件

人类 只能 玩 娱乐用品
人类 只能 驾驶 交通工具
人类 只能 坐 椅子
人类 只能 捡起 物件

-w-)/我理解就这么简单,如果题主能补充多的问题可能更好。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文