接上篇。
Animals(动物)类在现实生活中找不出这样的一个实例,没有一个叫动物的动物。他的子类,譬如像狗,鸟,是具体的一个实例,但是动物类只是一个抽象的概念。一个认知上的抽象。那这样的类就为抽象类。
那将Animals类 设置为抽象类,规定动物的基本属性,基本方法,抽象方法,那继承他的子类就必须实现父类的抽象方法,若不实现,那继承的这个类也必须设置为抽象类。
抽象类中可以有构造函数,属性的权限可以为private,public, protected.,含有抽象方法的类必须声明为抽象类。
抽象函数在抽象类中只是声明,具体实现交给子类。
eg
在上面的例子上继续改造,将Animals中的eat()方法设置为抽象函数。在子类中去实现它。

子类

接口
接口是一组规范,是一个标准。它不表示事务,接口是给类用的。
接口作用。 1:一种规范。
2:解耦合,降低耦合度。
接口的现实举例,比如 人要遵守法律。。人就是一个类,法律就是一个接口。
类可以实现多个接口,这就相当于人要遵守多个规章制度。
接口之间可以多继承,这就相当于所有的法律都是宪法之下的。
比如,上面的例子,我想要有飞的这个动作。那我不能在Animals中添加飞这个动作,要是这样的话,那继承他的子类都有飞这个动作,那继承它的Dog类也就有飞的动作,这样的逻辑违背了现实逻辑,是不成立的,那我也可以在每个类中单加这个动作,也能实现,但是接口还有一个功能就是降低耦合度,这样做没有降低耦合。为了达到这个目的,那我就把飞这个动作做成几个接口,那个类需要飞这个动作只需要实现它就行。
接口不能实例化对象,但是可以创建接口引用指向实现这个接口的类的实例化对象。
接口表示规范,所以它里面的属性都是public static final
方法都是abstract。
没有构造函数。
接口是一个特殊的抽象类。
eg:
定义一个飞的接口

bird实现Fly接口


一个类可以实现多个接口..
在上面的例子上在添加一个下蛋接口.

bird实现这个接口

接口支持多继承,和类继承基本差不多。
接口更多的有点偏一种动作。偏行为,而类更多的是特征,