加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 扩展对象并继承所有变量

发布时间:2020-12-15 08:34:38 所属栏目:Java 来源:网络整理
导读:假设我有一个类Car的对象,有30个变量,从最高速度到颜色.我想创建一个MyCar对象(类MyCar扩展Car),它基本上是相同的东西,除了它存储更多的信息. 我不可能立即创建MyCar对象(因为在成千上万的Car对象中只有少数会成为MyCar对象),除非我将其他字段留空,但这似乎
假设我有一个类Car的对象,有30个变量,从最高速度到颜色.我想创建一个MyCar对象(类MyCar扩展Car),它基本上是相同的东西,除了它存储更多的信息.

我不可能立即创建MyCar对象(因为在成千上万的Car对象中只有少数会成为MyCar对象),除非我将其他字段留空,但这似乎不太专业.并且既没有创建一个带有30个参数的构造函数,也没有通过方法调用设置30个参数.

那么,有没有办法轻松地从超类对象继承所有变量?

PS:我的计划不是关于汽车,但我认为这将是一个更简单的例子.

编辑

谢谢你的回复.它们对我的程序都有帮助,但不适用于这个特殊问题.建造者似乎没有益处,因为我的这些车没有变量的默认值.每次制造汽车时,所有变量都被填写(这是构建一种“事实表”所需的).

信封是一个有趣的设计,但仍然需要我复制子类构造函数中的所有变量.我希望有办法绕过这个.模板还需要我逐个复制所有变量.

在我的程序中,子类在搜索引擎中充当一种“包装类”.子类与普通汽车相同,但它们具有“排名分数”.我的程序旨在显示常规汽车,通过扩展它们,我可以轻松地显示子类并同时按分数排序.

我无论如何都要创建新对象,因为可以在同一辆汽车列表上执行多次搜索.因此,在原车中编辑变量不是一种选择.

也许这个问题有一个更好的解决方案,但是现在我想我必须将超类对象传递给构造函数并复制那里的所有变量.

谢谢您的帮助!

PS:我只是想,也许我可以将所有变量都抛到HashMap中.这样我可以使用.get(varname)访问它们,我只需要将一个HashMap变量传递给子类.下行是我必须投入很多,因为变量是字符串,整数,双打等的混合物.你怎么看,它是否可以接受编码风格?

解决方法

有效的 Java第2版,第2项:在面对许多构造函数参数时考虑构建器

And neither does creating a
constructor which takes 30 arguments,
or setting 30 arguments through method
calls.

如果您正面对一个参数太多的构造函数,那么您可能需要查看:Builder Pattern.
我们的想法是只将您想要/知道的字段设置到构建器中,而不必考虑可选的字段,或者您想要使用默认值的字段,然后调用build()来构造实际对象.请参阅该文章中的Java示例.

一旦你设置了这个模式,就可以用这种方式构建Cars(注意干净的结构):

Car car = new Car.Builder(required_param1,required_param2)
                 .color(RED) // optional params
                 .topSpeed(300)
                 .zeroToHundred(2)
                 .build();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读