引言:
最近在学习设计模式,就对面向对象部分的知识进行了一下总结,之前对很多知识不理解有些细节也没有注意到,这次来说相对好一点,下次可能还会有新的理解。
面向对象三大特性:封装、继承、多态;
封装:
每个对象都包含它能进行操作所需要的所有信息,对象不必依赖其他对象来完成自己的操作。
优点:1、解耦合 2、类内部可以自由修改 3、类具有清晰的对外接口
理解:类就相当于我们的房子,室内的装饰和摆设只能被室内的居住者欣赏和使用,摆设可以随意地改变不影响其他人,房子有门窗,供人进出以及流通空气。
继承:
继承定义了父类和子类,称作基类和派生类;
特点:
1、子类拥有父类非private的属性和功能;
2、子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;
3、子类可以以自己的方式实现父类的功能(方法重写);
理解:
小猫咪咪和小狗旺财都有名字属性和叫的方法,在代码中我们发现除了cat和dog不同和“喵”“汪”不同,其他一模一样,因此我们可以建立一个父类Animal类,把相同部分放到Animal中,让小猫和小狗去继承Animal类。
优点:
1、避免了重复的代码
2、修改和扩展比较容易
缺点:
父类变,子类必须改变,是一种强耦合。
注意:
子类可从父类继承(方法、域、属性、事件、索引指示器),构造方法不能被继承,只能调用,可以用base关键字。
多态:
不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。
特点:
1、子类以父类的身份出现
2、子类在工作时以自己的方式来实现
3、子类以父类的身份出现时,子类特有的属性和方法不可以使用
理解:
京剧演出的例子,父亲生病不能出演,现在儿子代替父亲出演,以父亲的身份出现是以自己的理解表演,代替父亲上场时不能表演出自己的绝活。
抽象类和接口:
C#允许把类和方法声明为abstract,即抽象类和抽象方法。
抽象类特点:
1、抽象类不能实例化
2、抽象方法必须被子类重写
3、类中包含抽象方法,那么类必须定义为抽象类。
接口:
接口把隐式公共方法和属性组合起来,以封装特定功能的一个集合。
特点:
1、 一旦实现了接口,类就可以支持接口所指定的所有属性和成员
2、声明接口和声明抽象类完全相同,不提供接口中任何成员的执行方式。
3、类必须要实现接口中的所有方法和属性
区别:
1、抽象类可以给出一些成员的实现,接口不包含
2、抽象类的抽象成员可被子类部分实现,接口的成员要全部实现
3、一个类只能继承一个抽象类,但可以实现多个接口
4、抽象类是对类的抽象,接口是对行为的抽象
5、抽象类是从子类中发现公共的东西,泛化出父类,子类继承父类,接口根本不知道子类的存在。
总结:
这几天讲了几个模式,把uml图的几种关系和面向对象的知识结合起来,设计模式基本上就可以理解了,然后向代码转换也就变得容易了,还有进步的空间,加油!