java - 在多个类中共享公共属性的最佳方式是什么?
问题描述
在多个类中共享公共属性的最佳方式是什么?
例如:
Class A
{
int a;
int b;
int c;
}
Class B
{
int a;
int b;
int d;
}
由于属性a
和b
本示例中的属性被重复,共享这些属性的最佳方式是什么?
目的是尽可能地重用代码。使用继承来共享数据成员是正确的做法吗?
解决方案
在类之间共享属性和行为(方法/操作)的常用方法是使用继承:
Class X { // Common base
int a;
int b;
}
Class A:X { // One specialization
int c;
}
Class B:X { // Another specialization
int d;
}
这有助于重用,因为您可以在不同的上下文中重用 X 的实现。
但是使用继承不仅仅是共享一些元素:继承还定义了一种泛化/特化关系:A 是一种特殊的 X。这意味着人们可能希望在使用 X 的地方也可以使用 A。此外,这是一个确定的关系:A 始终是 X。
但是正如您所指出的,如果只是为了共享,并且在没有任何概念关系的情况下,使用继承来节省一些击键可能不是最明智的想法。如有疑问,您可能更喜欢组合而不是继承:
Class X { // Some elements to be shared
int a;
int b;
}
Class A { // Independent class
X x;
int c;
}
Class B:X { // Another independent class
X x;
int d;
}
每个 A 和 B 都有一个属性 x,其中包含共享的 a 和 b。优点是 A 和 B 不受约束来推动 X 的界面。此外,该关系是动态的(例如,您可以没有定义 x,或者 x 可以更改)。此外,根据语言的不同,您甚至可以在多个 A 和 B 对象之间共享同一个 x 对象。
推荐阅读
- javascript - 如何将 Google 表单从模板连接到 Google AppsScript
- android - 比较文件的大小和该文件的字节数组的大小
- data-visualization - 合并 Google Data Studio 中的两个日期字段
- python - 如何使用 Keras model.fit() 方法将输入/输出图像传递到 Tensorboard 来训练模型?
- reactjs - 使用 Switch 组件的自定义图标时出错
- r - 如何在循环中正确解析(?) expss 中的 mdset?
- c++ - 将 C++ 指向成员变量的指针转换为变量基类型
- python - Seaborn 直方图/分布子图
- animation - 更新的纹理停止了 three.js 中的动画
- php - 使用 Laravel 控制器在数据库中保存 html 选择选项的值