抽象类与接口
抽象类:
A、抽象和抽象方法都必须用 abstract 修饰。
如:
abstract class 类名
Public abstract void eat();
B、有抽象类不一定有抽象方法,但有抽象方法一定是抽象类或接口。
C、抽象类不能实例化,需要由子类来实例化。抽象类的子类要么是抽象类,要么重写抽象类中的所有方法。
D、抽象类的可以有常量类型的成员变量,abstract 不能修饰成员变量。
E、 抽象方法:强制要求子类做的事情。非抽象方法:子类继承的事情。提高代码复用。
接口:
A、接口的实现类可以是抽象类,但没什么意义。实际上都是用的具体类来实现。
B、接口的成员变量都是静态公共的常量。成员变量有默认的(隐藏的)修饰符:public static final。但最好手动给出。
C、接口没有构造方法。
类与类、类与接口、接口与接口间的关系:
A、类与类是单继承关系,但可以多重继承。
B、类与接口是实现关系,可以单实现,也可以多实现。并且能在继承一个类的同时实现多个接口。
C、接口与接口是继承关系,可以单继承,也可以多继承。(不允许类多重继承的主要原因是,如果 A 同时继承 B 和 C,而 b 和 c 同时有一个 D 方法,A 如何决定该继承那一个呢?但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,反正都是实现类去
具体实现。所以接口可以继承多个接口。)
抽象类与接口的区别:
1)抽象类:
成员变量:可以变量,可以是常量。
成员方法:可以是抽象方法,也可以不是。
构造方法:有
2)接口:
成员变量:只能是静态公共常量。
成员方法:只能是抽象方法。
构造方法:没有
抽象类只能单继承,接口可以多继承。
3)设计理念的区别:
抽象类被继承体现是 is-a 的关系,定义的是该继承体系的 共性功能。
接口被实现体现是 like-a 的关系,定义的是该继承体系的。

浙公网安备 33010602011771号