接口和抽象类的区别和联系
来源:互联网 发布:2017商务笔记本 知乎 编辑:程序博客网 时间:2024/06/05 08:29
具体:http://blog.csdn.net/ttgjz/article/details/2960451
接口和抽象类有什么区别
你选择使用接口和抽象类的依据是什么?
接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。
抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。
人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.
所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。
第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。
第二点. 接口可以多继承,抽象类不行
第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。
第四点. 接口中基本数据类型为static 而抽类象不是的。
当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的
所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。
=====================================
含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不必是抽象的,抽象来中定义抽象方法必须放在具体子类中实现,所以呀,不能有抽象的构造方法或抽象的静态方法,如果子类没有实现抽象父类中的所有 方法,那么,子类也必须定义为抽象类。
接口(interface)可以说成是抽象类的特例。接口中的所有方法都必须是抽象的,接口中的方法定义默认为public abstract 。接口中的变量是全局常量,即public static final修饰的。
看一下他们在语法上的区别吧!
1,抽象类里可以有构造方法,而接口内不能有构造方法。
2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5,抽象类中可以包含静态方法,接口内不能包含静态方法。
6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。
7,一个类可以实现多个接口,但只能继承一个抽象类。
再补充点两者在应用上的区别:
接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用
大原则:一个类千万不要去继承一个已经实现好的类,只能继承抽象类或实现接口,如果抽象类和接口都可以使用的时候,优先使用接口,避免单继承的局限。
- 抽象类&接口的区别和联系
- 抽象类和接口的区别和联系
- 接口和抽象类的区别和联系
- 接口和抽象类的区别和联系
- 抽象类和接口的区别和联系【java】
- 接口和抽象类的联系和区别
- interface接口和abstract抽象类的区别和联系
- 接口和抽象类的区别和联系
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 抽象类和接口联系与区别
- 第14周项目4(4)输出一些简单回路
- iOS开发备忘录:自定义UINavigationBar背景图片和Back按钮
- 快速破解本地的mysql用户名和密码
- 第十六周 项目一 (7)归并排序
- 第六周项目5 后缀表达式
- 接口和抽象类的区别和联系
- 第十二周-迷宫问题(用深度遍历算法)
- 第十六周项目7 归并排序
- 最接近零的子数组和_LintCode
- 【Android入门】界面布局中的错误
- javaweb页面嵌入天气显示
- mapreduce入门 note2 【mapreduce标准流程|】
- 分享一道伯克利 CS 61A 关于高阶函数的一道Python作业题(2)
- IOS 之使用FMDB进行SQLite数据库操作——表的创建与修改,以及数据的增删改查和多线程操作数据库