接口类与抽象函数类的区别
来源:互联网 发布:仿真实验室软件 编辑:程序博客网 时间:2024/05/16 19:33
今天刚看到这,感觉有点糊涂,收集众家所言汇总于此,以备忘
2.abstract:强制要求其继承者重写。声明时不提供其自身的实现,抽象类不能被实例化;
3.interface:接口就是协议,其声明的成员(属性,方法,事件和索引器)必须由其继承的类实现。接口不能直接被实例化。
虚方法与抽象方法的区别在于,虚方法提供自身的实现,并且强制要求子类重写;而抽象方法不提供自身的实现,并且强制子类重写。
抽象类与接口很相似,但是思路不一样。接口是公开类的成员,而抽象类则是抽象类成员以要求子类继承并实现。
1. 抽象类和接口的比较
抽象类
接口
1
使用abstract关键字来定义抽象类。
使用interface关键字来定义接口。
2
在抽象类中可以定义抽象方法,也可以定义非抽象方法。
在接口中只能定义默认的抽象方法,不能定义非抽象的方法。接口实际上是一个纯抽象类。
3
在抽象类中定义的抽象方法,没有方法体。
在接口中定义的方法,没有方法体。
4
在抽象类中能定义常量、变量、静态方法和构造函数。
在接口中只能定义静态常量和实例方法,不能定义实例常量、静态变量、实例变量、静态方法和构造函数。
5
抽象类本身不提供它所定义的抽象方法的实现。
抽象类能被继承,由它的子类来实现在抽象类中定义的所有抽象方法。
接口本身不提供它所定义的方法的实现。
接口能被实现,由它的实现类来实现在接口中定义的所有方法。
6
在子类中必须覆盖它的抽象类定义的所有抽象方法。
在实现类中必须实现它的接口定义的所有方法。
7
抽象类可以从另一个抽象类继承。
接口可以从另一个接口继承。
8
当一个抽象类继承于另一个抽象类时,可以不用实现在基类(抽象类)中定义的抽象方法。
当一个接口继承于另一个接口时,不用也不能实现它的父接口中定义的方法,因为在接口中定义的方法是隐式的抽象方法,是没有方法体的。
9
抽象类不能实例化。
接口不能实例化。
10
定义抽象类时不能使用final关键字。
定义接口时不能使用final关键字。
11
一个类只能继承一个抽象类。
一个类可以实现多个接口。
(1) 抽象类主要用作基类,共享某些公共的成员和行为。
(2) 接口主要用于类,在接口中定义这些类都具有的功能。
(3) 好的接口定义应该具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只需要实现接口中的一个功能,而不得不去实现接口中的其它方法,这就叫接口污染。
(4) 抽象类主要用于一系列关系密切的对象;而接口适合为不相关的类提供通用功能。
(5) 示例1:
飞机会飞,鸟会飞,F22战斗机属于飞机(抽象类),鸽子属于鸟(抽象类),但它们都实现了同一个接口“飞”。
(6) 示例2:
就像铁门和木门都是门(抽象类),你想要门,我给不了(抽象类不能实例化),但我可以给你个具体的铁门或木门(多态性);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口),也可以有门铃(另一个接口,多实现)。门(抽象类)定义了是什么,锁(接口)规定了能做什么,一个接口最好只能做一件事,你不能要求锁也发出声音(接口污染)。
1. 抽象类和接口的比较
抽象类
接口
1
使用abstract关键字来定义抽象类。
使用interface关键字来定义接口。
2
在抽象类中可以定义抽象方法,也可以定义非抽象方法。
在接口中只能定义默认的抽象方法,不能定义非抽象的方法。接口实际上是一个纯抽象类。
3
在抽象类中定义的抽象方法,没有方法体。
在接口中定义的方法,没有方法体。
4
在抽象类中能定义常量、变量、静态方法和构造函数。
在接口中只能定义静态常量和实例方法,不能定义实例常量、静态变量、实例变量、静态方法和构造函数。
5
抽象类本身不提供它所定义的抽象方法的实现。
抽象类能被继承,由它的子类来实现在抽象类中定义的所有抽象方法。
接口本身不提供它所定义的方法的实现。
接口能被实现,由它的实现类来实现在接口中定义的所有方法。
6
在子类中必须覆盖它的抽象类定义的所有抽象方法。
在实现类中必须实现它的接口定义的所有方法。
7
抽象类可以从另一个抽象类继承。
接口可以从另一个接口继承。
8
当一个抽象类继承于另一个抽象类时,可以不用实现在基类(抽象类)中定义的抽象方法。
当一个接口继承于另一个接口时,不用也不能实现它的父接口中定义的方法,因为在接口中定义的方法是隐式的抽象方法,是没有方法体的。
9
抽象类不能实例化。
接口不能实例化。
10
定义抽象类时不能使用final关键字。
定义接口时不能使用final关键字。
11
一个类只能继承一个抽象类。
一个类可以实现多个接口。
(1) 抽象类主要用作基类,共享某些公共的成员和行为。
(2) 接口主要用于类,在接口中定义这些类都具有的功能。
(3) 好的接口定义应该具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只需要实现接口中的一个功能,而不得不去实现接口中的其它方法,这就叫接口污染。
(4) 抽象类主要用于一系列关系密切的对象;而接口适合为不相关的类提供通用功能。
(5) 示例1:
飞机会飞,鸟会飞,F22战斗机属于飞机(抽象类),鸽子属于鸟(抽象类),但它们都实现了同一个接口“飞”。
(6) 示例2:
就像铁门和木门都是门(抽象类),你想要门,我给不了(抽象类不能实例化),但我可以给你个具体的铁门或木门(多态性);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口),也可以有门铃(另一个接口,多实现)。门(抽象类)定义了是什么,锁(接口)规定了能做什么,一个接口最好只能做一件事,你不能要求锁也发出声音(接口污染)。1. 抽象类和接口的比较
抽象类
接口
1
使用abstract关键字来定义抽象类。
使用interface关键字来定义接口。
2
在抽象类中可以定义抽象方法,也可以定义非抽象方法。
在接口中只能定义默认的抽象方法,不能定义非抽象的方法。接口实际上是一个纯抽象类。
3
在抽象类中定义的抽象方法,没有方法体。
在接口中定义的方法,没有方法体。
4
在抽象类中能定义常量、变量、静态方法和构造函数。
在接口中只能定义静态常量和实例方法,不能定义实例常量、静态变量、实例变量、静态方法和构造函数。
5
抽象类本身不提供它所定义的抽象方法的实现。
抽象类能被继承,由它的子类来实现在抽象类中定义的所有抽象方法。
接口本身不提供它所定义的方法的实现。
接口能被实现,由它的实现类来实现在接口中定义的所有方法。
6
在子类中必须覆盖它的抽象类定义的所有抽象方法。
在实现类中必须实现它的接口定义的所有方法。
7
抽象类可以从另一个抽象类继承。
接口可以从另一个接口继承。
8
当一个抽象类继承于另一个抽象类时,可以不用实现在基类(抽象类)中定义的抽象方法。
当一个接口继承于另一个接口时,不用也不能实现它的父接口中定义的方法,因为在接口中定义的方法是隐式的抽象方法,是没有方法体的。
9
抽象类不能实例化。
接口不能实例化。
10
定义抽象类时不能使用final关键字。
定义接口时不能使用final关键字。
11
一个类只能继承一个抽象类。
一个类可以实现多个接口。
(1) 抽象类主要用作基类,共享某些公共的成员和行为。
(2) 接口主要用于类,在接口中定义这些类都具有的功能。
(3) 好的接口定义应该具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只需要实现接口中的一个功能,而不得不去实现接口中的其它方法,这就叫接口污染。
(4) 抽象类主要用于一系列关系密切的对象;而接口适合为不相关的类提供通用功能。
(5) 示例1:
飞机会飞,鸟会飞,F22战斗机属于飞机(抽象类),鸽子属于鸟(抽象类),但它们都实现了同一个接口“飞”。
(6) 示例2:
就像铁门和木门都是门(抽象类),你想要门,我给不了(抽象类不能实例化),但我可以给你个具体的铁门或木门(多态性);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口),也可以有门铃(另一个接口,多实现)。门(抽象类)定义了是什么,锁(接口)规定了能做什么,一个接口最好只能做一件事,你不能要求锁也发出声音(接口污染)。- 接口类与抽象函数类的区别
- 抽象类与接口的区别 - [ Java 接口 抽象类 ]
- 抽象类与接口类的区别
- 接口类与抽象类的区别
- 抽象类与接口“类”的区别
- 抽象类与接口的区别
- 转载:抽象类与接口的区别
- 抽象类与接口的区别(1)
- 抽象类与接口的区别
- 抽象类与接口的区别
- 转载:抽象类与接口的区别
- 抽象类与接口的区别 [转]
- 抽象类与接口的区别
- 抽象类与接口的区别
- 抽象类与接口的区别
- 抽象类与接口的区别
- 抽象类与接口的区别 (good)
- 抽象类与接口的区别
- Oracle存储过程中使用临时表的替代方案
- C#十六进制颜色与Color对象的互相转换
- Become a iOS coder iOS入门文档
- 从程序员到技术总监,分享10年开发经验
- hibernate操作java.util.Date和java.sql.Date
- 接口类与抽象函数类的区别
- Android的Tween Animation动画介绍
- java的文件操作
- 邮件发送
- 如何查看linux和windows系统是32为还是64位?
- java的IO处理
- url传递中文,和重定位
- 各排序算法效率图
- C++ 类访问控制public/private/protected探讨