-
MYYA
封装的优势在于定义只可以在类内部进行对属性的操作,外部无法对这些属性指手画脚,要想修改,也只能通过你定义的封装方法;继承减少了代码的冗余,省略了很多重复代码,开发者可以从父类底层定义所有子类必须有的属性和方法,以达到耦合的目的;多态实现了方法的个性化,不同的子类根据具体状况可以实现不同的方法,光有父类定义的方法不够灵活,遇见特殊状况就捉襟见肘了
-
潇湘沐
封装、继承、多态比较抽象,只是一种概念,刚开始学的时候无需太过于深究,如果要你一上来学JAVA就理解这些东西,有点牵强,你所要做的就是至少看到代码知道这个用到的是什么。封装的概念好比一辆汽车,你学开车的时候只需学会诸如踩油门、刹车,转方向盘即可,无需去了解它的发动机是如何发动。继承,先说说我对类的理解,类起到的作用有:分类(你所用某个类创建的对象实际上该类的个案)和模板的作用,那么继承则起到了对类再次分类的作用,比如,有个类“动物”,“哺乳动物”继承“动物”,再往下“马”又继承了“哺乳动物”这个类。在这里,我们从下往上讲,首先,我们把某种东西划分出来,叫做“马”(当然还有“牛”,“鱼”等等),接着,我们发现,“马”,“羊”等还有很多共同的特点,于是,我们再次划分出了“哺乳动物”这个类,再次分类,我们则有了“动物”。但在实际开发中,我们一般是从上往下定义的,即先有了“动物”,再有“哺乳动物”,最后有“马”。多态,正如上面朋友所说一重写,二重载。用汉字来打个比方,比如“开”这个字,在不同的时候各有的意思,比如“开门”,“开窗”,甚至有“开车”,“开饭”等,具有相同名称但操作不同。具体的实现我就不累述了。说说接口吧,在JAVA不支持多继承的,实际上接口起到了类似多继承的作用,一个类只能继承另一个类(或抽象类)但可以实现多个接口。打个比方,“张三”,他是一个“人”,因此他继承了“人”;与此同时,他是一个“司机”,他的平时行为还有“开车”,很显然,这并不能从“人”这个类里继承下来。怎么办?JAVA里只支持单继承,这个时候,接口就起到了作用,它定义了“司机”这个接口,“张三”实现了它,因此,他会开车了。类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象;实例变量是类实例化后,系统为其创建的一个类的实例变量的拷贝,即一个实例拥有一个实例变量。类变量则是用static声明,系统为每个类变量分配一次存储空间。即所有的实例共享一个类变量。
-
GCT1015
首先我要说的是,封装、继承、多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念。所以想要弄明白封装、继承、多态,首先就要先了解面向对象概念。 封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来。封装就是把一些特征或功能组合到一个抽象的对象上。就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等。功能有计算等。那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能。但这个“电脑”不是实物,它代表所有名叫“电脑”的实物的名称。在C#中,我们把封装好的抽象的名词叫"class",所以我们称“电脑”叫一个类(class),而实体电脑叫这个类的对象(或者叫实例)。 而继承、多态则是类的特性。 继承:这个词就用正常的语义来解释就可以了,比如说你继承了你父亲的优点。而在C#中类也是可以继承的(单继承),比如说我们有了“电脑”这个类,现在我们再定义一个类叫“联想电脑”,难道我们要把电脑的特征、功能再定义一遍?可以是可以的,但是这样一方面代码有点重复,另一方向也不方便管理和说明“联想电脑”的特征。所以我们可以让“联想电脑”继承于“电脑”这个类,我们称“联想电脑”为“电脑”的子类或派生类,而“电脑”叫做父类或基类。这样,只要“电脑”有的东西,“联想电脑”都有,但是“联想电脑”还可以进化出(再添加)自己特有的东西。所以,父类(基类)为子类(派生类)的子集。