抽象类的三个特性(abstract)
- 抽象类不允许被实例化只能被继承,也就是说你不能new 出来一个抽象类的对象。
抽象类里面有两种属性和方法
- 抽象属性和方法:只声明,不实现
- 非抽象属性和方法:声明 + 实现
- 子类实现抽象方法:子类必须实现父类中的所有抽象方法。
接口的三个属性(interface)
- 接口不能包含属性
- 接口只能声明方法,不能包含实现代码
- 类实现接口类的时候,必须实现接口中声明的所有方法
抽象类和接口的区别
- 抽象类是对成员变量和方法的抽象,是一种
is-a
关系,是为了解决代码复用问题
is-a:代表类与类之间的继承关系
比如:猫和狗都是动物,都继承动物的特性。(所谓动物的特性就相当于抽象类中的抽象属性和方法、猫和狗都具有动物的特性,即实现动物的抽象属性)
- 接口仅仅是解决对方法的抽象(抽象类 - 类的抽象),是一种
has-a
关系,是为了解决解耦问题,提高代码的扩展性
has-a:代表对象和它的属性之间的从属关系
同一个类的对象,通过它的属性的不同值来区别
比如:小明和小红 都是同一个类(Person) 但是他们有不同的属性值(Person xiaoming = new Person("小明"))是一个整体和部分的关系
两者再区别
- 抽象类 - 强调它是什么
B 继承 抽象类A 并实现了 A 中的抽象属性和方法,那么它就属于 A
比如 鸟(有翅膀、尖嘴、会下蛋) -继承- B(会说人话):B继承鸟类这个抽象类那么他就得实现鸟类得相关特性,所以它就是一只鹦鹉 - 接口 - 强调它有什么功能
Man 和 Woman实现 接口Person 重写 Person 中的相关方法来,但是赋予了不同内容,进而有了不同的能力
总结
- 抽象类是为了解决代码复用问题
比如你要写所有的很多鸟相关的类、你把每个鸟都有的属性写在抽象类中、然后再在子类当中写入不同的鸟所特有的属性,这样就不用再在子类中添加这些属性。使得代码高度复用
- 接口是为了解决抽象问题
比如说你要写王者荣耀里所有的的英雄的技能,假设这些英雄都只有3个技能,那么我们就在接口中定义(技能一、技能二、技能三)即可、然后每个英雄的技能在子类中具体实现即可。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。