Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 如何避免在嵌套类结构中重复属性?_Oop - Fatal编程技术网

Oop 如何避免在嵌套类结构中重复属性?

Oop 如何避免在嵌套类结构中重复属性?,oop,Oop,例如,我有以下类结构: Animal ---Cat ------property: CatCollar (boolean) ---Dog ------BigDog ------TinyDog ---------property: CatCollar (boolean) 我在Cat类和TinyDog类中有相同的属性CatCollar,但是这个属性不应该在BigDog类中。我的评论员告诉我,这是一个糟糕的结构,因为它会导致重复。我无法更改类的结构,但只能更改此属性(位置和其他操作)。也许有一些OO

例如,我有以下类结构:

Animal
---Cat
------property: CatCollar (boolean)
---Dog
------BigDog
------TinyDog
---------property: CatCollar (boolean)

我在Cat类和TinyDog类中有相同的属性CatCollar,但是这个属性不应该在BigDog类中。我的评论员告诉我,这是一个糟糕的结构,因为它会导致重复。我无法更改类的结构,但只能更改此属性(位置和其他操作)。也许有一些OOP工具可以让你做到这一点?我是否可以避免复制一个属性?如果是,如何实现?

在面向对象中,每个对象都有什么“数据”(即私有状态)并不重要。它只关心它们提供什么行为,即使在继承树中也是如此

所以,如果“属性”指的是公共状态,或者是通过公共getter访问的私有状态,那么在一定程度上您已经离开了面向对象。从面向对象的角度讨论什么是正确的已经没有意义了

如果您的意思是作为一个私有国家,共享一些潜在的行为,那么您可能需要授权。也就是说,
Cat
TinyDog
都实现了一些描述所需行为的接口,然后在它们都委托给(即包含)的某个类中实现它。不幸的是,Java本机不支持这一点(例如在Kotlin中),因此需要一些样板文件