关于如何理解面向对象编程属性这个概念的理解,求助大侠给小弟一个清晰明了的解答,不胜感激!!!

2024-12-22 16:14:35
推荐回答(2个)
回答1:

属性和行为是一组对象(类)的本质特征,这组对象就因为这些属性和行为而存在的,换句话说如果缺少了这些属性,这个类就不是这个类了!

比如Man肯定要有Man的属性(生理特征,这个特征可以区分男人和女人),但是一个Man不一定要有Wife才算Man的,所以Wife不是Man的一个属性,相反Wife是Husband的一个属性,而husband是一个Man(既Hasband是Man的子类).

你说的那个鸟类的翅膀当然是鸟的属性了,因为有翅膀的生物都是鸟嘛!

实际上你的类定义里面除了方法以外其他的基本上都可以看做属性的。

每个类都有静态属性和动态属性,如:每个人都有年龄这个属性,但是具体的年龄值是变化的。

静态属性有类来定义,而动态属性则由对象来定义。

所以类有属性和行为,对象有行为、状态和标识符。

以上回答仅供参考,楼主慎取之。

回答2:

属性的存在方式、可以代表的是一切对象,而不只是简单的值类型属性。
在属性里,其实保留的只是对象的访问地址,并不总是装着对应东西的具体内容,外界访问属性,其实属性只是返回属性现在所代表的对象内容在内存中的位置,只是一个内存地址指针。所以一个 “Car”,可以有4个 “轮”、两倒后镜、一引擎、一外壳、4座位、4侧窗、1前窗1后窗,等等,并不是说Car类里把其它的这些类都真的 “集中在一块内存了” ,而是在Car里有其它组成部分的指向列表,这些是已经抽象并归类了的对象,每个对象其实里边还可以继续延伸下一层的对象分拆,例如轮子一定有铃与肽两样东西,肽则有它相关的属性,铃也有不同的属性,但它们都给最顶的Car给套住了,就像绳子一样,把它们都串成了木偶似的了。

所以:Car.Tire[0].Weight 代表的是汽车的第一个轮的重量
Car.Shell.Color 代表的是汽车外壳的颜色
Car.Weight 则是整台汽车的重量

这些在OOP编程里一个对象包含另外的对象的情况,叫 “复合”。

我推荐一本书给你看,《Head First》(中文版),你需要了解对象,继承,复合,模式等等和OOP思想一起的所有间接机制。

所以现在你要的是解开对属性产生的一些限制性观念,这样属性除了值,还可以是任何对象,这样可能就好理解了,不必和过去的比喻去执着定义问题。它的核心观念就是 “间接机制”。