设计模式中六大原则,是对面向对象编程中“高内聚,低耦合”思想的继承,学习过程中经常容易混淆概念,容易搞乱一些经常出现的名词,下面就对抽象类和接口,深浅复制进行一下区分。
抽象类vs接口
1、 抽象类与接口是面向对象思想层面概念,不是程序设计语言层面概念
2、抽象类是本体的抽象,接口是行为的抽象
抽象类:不能实例化的类。特殊之处在于:包括抽象方法(没有实现码),不能被实例化。可以派生自一个抽象类。
接口:一组方法声明的集合,规定了实现本接口必须履行所有的契约。
概念角度区别:
首先,抽象类是类,接口是集合。
其次,抽象类使用动机是在不允许实例化的限制下复用代码;接口使用动机则是松散对象间耦合,及实现程序多态性。
相同点:
1.不能实例化
2.包含没有实现码的方法
3.派生类必须实现这些方法,抽象类是抽象方法,接口是所有成员(不仅是方法)
区别:
1.抽象类表示“是一个(is-a)关系的抽象”,接口表示“能(can-do)”关系的抽象。
2.抽象类是对类的抽象;接口是一个行为规范,证明“我必须做”
3.一个类可以实现若干接口,但只能集成自一个父类
4.抽象类不能被密封
5.好的接口定义要具备专一性功能,否则造成接口污染。(实现的接口方法中有不需要的方法)
6.抽象类定义类型方法时,可以给出非抽象方法的实现;而接口中的所有方法都要给出实现、
7.继承类继承抽象类的抽象方法时,可以不用重写,而是沿用抽象类的方法;接口则要求必须给出相应的实现。
接口好处:不光可以作为引用类型,也可以作为值类型。抽象类,职能作用为引用类型
通过借口,可以减少类型暴露的属性和方法,便于保护类型对象。
浅复制与深复制:
浅拷贝是数据之间的赋值,把值赋给要拷贝的值。但是如果对象还包含资源(文件,另一个值堆资源),拷贝时,两个对象就有共同资源,同时对资源进行访问就会出项问题。
深拷贝,用来解决这样问题,把资源也赋值一次,是对象拥有不同资源,但内容是一样的(又在堆栈分配了另一个内存空间),把原来内容拷贝过来。
如果拷贝对象中引用了外部内容,在拷贝这个对象时候,让心就对象指向同一个外部内容,就是浅拷贝;若拷贝对象时,为新对象制作了独立拷贝,就是深拷贝。
就是说,如果拷贝对象时,需要拷贝这个对象引用的对象,就是深拷贝,否则是浅拷贝。
总结:对概念的区分,还没有进行到实践阶段,不能真正运用出来,还没能体会到设计模式到底怎样的将面向对象的理论体现出来,只是对一些概念作粗浅的理解区分,在学习中不断总结,慢慢消化。