抽象类和接口
来源:互联网 发布:淘宝客服售前话术大全 编辑:程序博客网 时间:2024/04/30 21:09
抽象类和接口
最近在实践一个项目,其中有一个写细节,可以用抽象类,也可以用接口,这到底有什么好,这又有什么区别呢?
定义:
抽象类:
在编码中,把类和方法声明Abstract,即可抽象类和抽象方法。
abstract class Strategy { public abstract voidAlgorithmInterface(); }
接口:
吧隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦实现了接口,类就可以支持所指定的所有属性和成员。生命接口在语法上和声明抽象类完全相同。
注意:但不允许提高接口中任何成员的执行方式。
(1)接口不能实例化,不能有构造方法和字段;
(2)不能有修饰符,比如public、private等等;
(3)不能声明虚拟的或静态的
interface IStrategy { voidAlgorithmInterface(); }
详细特点:
抽象类特点:
第一, 抽象类不能实例化,比如“动物”实例化是没有意义的。
第二, 抽象方法必须被子类重写的方法,不重写,就没有存在的意义了。---这其实可以看做是没有实体的虚方法。
第三, 如果类中有抽象方法,那么类就必定是抽象类,不管它是否有其他的方法。
接口特点:
(1) 实现接口就必须要实现接口中所有的方法和属性。
(2) 一个类可以支持多个接口,多个类也可以支持相同的接口。
(3) 接口的命名,前面要加一个大写字母“I”。
(4) 接口的声明是Interface,而不是class,接口中方法或属性前面没有任何的修饰符、方法没有方法体。
对比抽象类和接口:
比如猫,狗都是动物,有很多的相似之处,我们可以去继承动物这个抽象类;而飞机,麻雀,超人这些不相关的类,但又有共同特点,可以去实现相同的接口。
抽象类是有好几个子类,之后抽象出来的,然后由子类继承父类;而接口是根不知道子类的存在,方法如何实现还不确定,只是预先定义。-----抽象类是自底向上抽象出来,而接口是自顶向下设计出来的。
(1) 抽象类可以给出一些成员的实现,接口却不包含成员的实现
(2) 抽象类的抽象成员可被子类部分实现,但是接口的成员必须要实现类完全实现。
(3) 一个类只能继承一个抽象类,但是hi可以实现多个接口
(4) 类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。他们共性都是——————抽象。
(5) 如果行为跨域不同类的对象,可以使用接口;对于一些相似的类对象,用继承抽象类。比如猫,狗都是动物,有很多相似东西,我们可以用抽象类;飞机、麻雀、超人完全不相关类,但都会飞,我们可以去实现相同的接口。
(6) 从设计角度来说,抽象类是从子类中发现公共的东西,泛化出父类,然后子类继承父类;而接口是根本不知道子类的存在,方法如何实现还不确认,预先定义。
同一功能可以用抽象类也可用接口实现:
写成抽象类代码:
<span style="font-size:18px;">namespace Strategy1._0{ abstract class Strategy { public abstract voidAlgorithmInterface(); }}</span>
写成接口代码:
<span style="font-size:18px;">namespace Strategy1._0{ interface IStrategy { voidAlgorithmInterface(); }}</span>
- 抽象接口和抽象类
- 接口和抽象类
- 接口和抽象类
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 抽象类和接口
- 接口和抽象类
- 抽象类和接口
- 接口和抽象类
- java代码块
- MongoDB如何确保一致性
- 求二叉树的高度
- MFC中利用ListCtrl的列标题获取列索引的方法
- textarea高度随文字增多变化高度
- 抽象类和接口
- burpsuite 配置代理无效
- 数据库中查找包含换行符的记录
- uva 11129An antiarithmetic permutation
- eclipse启动出现“An Error has Occurred. See the log file”解决方法
- HTTP中的重定向和请求转发的区别
- studio的adb命令
- join on where执行顺序
- macOS Sierra 下安装svn方法