我是一个以 OOP 术语思考的相对新手,还没有找到我的“直觉”来正确地做这件事。作为一个练习,我试图找出在不同类型的对象之间创建界限的位置,以我桌子上的饮料为例。
假设我创建了一个 object Drink
,它具有像 and 这样的属性和像volume
andtemperature
这样的方法pour()
,drink()
我正在努力查看特定饮料“类型”的来源。
假设我有一种饮料类型Tea
,Coffee
或者Juice
,我的第一直觉是子类Drink
,因为它们具有共同的属性和方法。
然后问题就变成了两者Tea
和具有和之Coffee
类的属性,但没有,而所有三个都具有(分别为伯爵茶、去咖啡因和橙色)。sugars
milk
Juice
variant
同样,Tea
并且Coffee
有一个方法,而这对一个对象addSugar()
没有意义。Juice
那么这是否意味着超类应该具有这些属性和方法,即使所有子类都不需要它们,或者我是否在子类上定义它们,特别是对于像这样的属性variant
,每个子类都有它自己的有效值列表?
但后来我得到了两种addSugar()
方法,分别是子类Tea
和Coffee
子类。
或者考虑到我最终将所有属性和方法放在超类上,因为大多数属性和方法至少在几种饮料类型之间共享,我想知道子类化的意义何在?
我担心我只是想抽象太多,但不想让自己陷入困境,如果我想添加一种新的类型,比如Water
- with variant
still or sparkling - 在路上。