2.abstract:强制要求其继承者重写。声明时不提供其自身的实现,抽象类不能被实例化;
3.interface:接口就是协议,其声明的成员(属性,方法,事件和索引器)必须由其继承的类实现。接口不能直接被实例化。
---------------------------------------------------------------------------------------------------------------
虚方法与抽象方法的区别在于:
虚方法提供自身的实现,并且不强制要求子类重写;
而抽象方法不提供自身的实现,并且强制子类重写。
---------------------------------------------------------------------------------------------------------------
抽象和接口的比较:
抽象类与接口很相似,但是思路不一样。接口是公开类的成员,而抽象类则是抽象类成员以要求子类继承并实现。
抽象类
扫描二维码关注公众号,回复:
2586539 查看本文章
|
接口 |
|
1 |
使用abstract关键字来定义抽象类。 |
使用interface关键字来定义接口。 |
2 |
在抽象类中可以定义抽象方法,也可以定义非抽象方法。 |
在接口中只能定义默认的抽象方法,不能定义非抽象的方法。 接口实际上是一个纯抽象类。 |
3 |
在抽象类中定义的抽象方法,没有方法体。 |
在接口中定义的方法,没有方法体。 |
4 |
在抽象类中能定义常量、变量、静态方法和构造函数。 |
在接口中只能定义静态常量和实例方法,不能定义实例常量、静态变量、实例变量、静态方法和构造函数。 |
5 |
抽象类本身不提供它所定义的抽象方法的实现。 抽象类能被继承,由它的子类来实现在抽象类中定义的所有抽象方法。 |
接口本身不提供它所定义的方法的实现。 接口能被实现,由它的实现类来实现在接口中定义的所有方法。 |
6 |
在子类中必须覆盖它的抽象类定义的所有抽象方法。 |
在实现类中必须实现它的接口定义的所有方法。 |
7 |
抽象类可以从另一个抽象类继承。 |
接口可以从另一个接口继承。 |
8 |
当一个抽象类继承于另一个抽象类时,可以不用实现在基类(抽象类)中定义的抽象方法。 |
当一个接口继承于另一个接口时,不用也不能实现它的父接口中定义的方法,因为在接口中定义的方法是隐式的抽象方法,是没有方法体的。 |
9 |
抽象类不能实例化。 |
接口不能实例化。 |
10 |
定义抽象类时不能使用final关键字。 |
定义接口时不能使用final关键字。 |
11 |
一个类只能继承一个抽象类。 |
一个类可以实现多个接口。 |
(1) 抽象类主要用作基类,共享某些公共的成员和行为。
(2) 接口主要用于类,在接口中定义这些类都具有的功能。
(3) 好的接口定义应该具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只需要实现接口中的一个功能,而不得不去实现接口中的其它方法,这就叫接口污染。
(4) 抽象类主要用于一系列关系密切的对象;而接口适合为不相关的类提供通用功能。
--------------------------------------------------------------------------------------------------
示例1:
飞机会飞,鸟会飞,F22战斗机属于飞机(抽象类),鸽子属于鸟(抽象类),但它们都实现了同一个接口“飞”。
示例2:
就像铁门和木门都是门(抽象类),你想要门,我给不了(抽象类不能实例化),但我可以给你个具体的铁门或木门(多态性);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口),也可以有门铃(另一个接口,多实现)。门(抽象类)定义了是什么,锁(接口)规定了能做什么,一个接口最好只能做一件事,你不能要求锁也发出声音(接口污染)。
--------------------------------------------------------------------------------------------------
抽象类是否可继承实体类 ?
答案是可以。
解释:
请参考:https://blog.csdn.net/qq_36098284/article/details/80751927
--------------------------------------------------------------------------------------------------
接口是否可继承接口? 抽象类是否可实现(implements)接口?
答案:接口可以继承接口,抽象类可以实现接口。 --------------------------------------------------------------------------------------------------
抽象类中是否可以有静态的main方法?
答案:抽象类中可以有静态的main方法。抽象类中的参数可以包括,常量,变量,静态方法和构造函数。但是接口只能包含静态常量和实例方法,不可以包含静态变量,实例常量,实例变量和构造函数。 --------------------------------------------------------------------------------------------------
参考:https://blog.csdn.net/tiancaixuchao2009/article/details/7207222