接口与抽象类的区别
2018-06-27 09:46:53来源:博客园 阅读 ()
首先,接口与抽象类是Java面向对象设计的基础机制。
接口,是对行为的抽象,它是抽象方法的集合。利用接口能实现API定义与实现分离的目的,不能实例化,只能包含抽象方法、常量。任何field都隐含了public static final修饰。同时没有非静态方法,要么是抽象方法,要么是静态方法。Java中定义了很多接口。如List、Set接口。
抽象类,用abstract修饰,可以实现代码复用。除了不能实例化外,其他与Java类并没有太大差别。可以有一个或多个抽象方法,也可以没有抽象方法。抽象类大多用于抽取Java相关类的共同方法实现和共同成员变量,通过继承来达到代码复用的效果。Java标准库中Collections中就有很多部分被抽取成抽象类,如java.util.ArrayList类。
Java实现interface用implements关键字,继承abstract class用extends关键字。Java不支持多继承,除了接口可以多继承接口,类可以实现多个接口,接口不可以继承抽象类只能继承接口。
面向对象设计的基本要素:封装、继承、多态
封装:增加了类的安全性与隐藏内部实现的细节,与外部划定了合理的界限,避免外部调用者接触到内部的细节。日常开发中暴露内部细节导致的bug过多,比如在多线程暴露内部状态,导致并发修改问题。
继承:使我们进行代码复用的主要机制,类似于车、公交车、轿车的归纳总结;另一方面继承也类似于一种紧耦合的一种关系,父类代码修改,也会引起子类的行为。所以滥用继承可能会起到反效果。
多态:可能立即想到,重写(override)、重载(overload)、向上转型(父类引用指向子类对象)。简单说就是,父子类中相同名字和参数方法,有着不同的实现,重载则是在同一个类里有着相同的方法名称,不同的参数。返回值不同不是重载,编译都会出错。
面向对象的设计原则:S、O、L、I、D
单一原则(Single Responsibility):类或者对象最好只具有单一职责,如果发现在本类中承担有多种义务,可以考虑将其拆分。
开放封闭原则(Open-Close Open for extension Close for modification):设计要对内扩展开放,对修改关闭。尽量避免新增功能的同时,修改已有实现
里式替换原则(Liskov Substitution):进行继承关系抽象时,凡是用到父类或基类的地方,都可以用子类进行替换。
接口分离(Interface Segregation):在进行接口和类定义时,如果一个接口存在多个方法时,实现它的类可能只会用到部分方法,这就减少了类的内聚性,通常会将该接口,划分为多个接口,将行为进行解耦,在未来维护中,如果某个接口有变,不会对使用其他接口的子类造成影响。
依赖分离(Dependency Inversion): 实体应该依赖抽象而不是具体实现。也就是高层次模块不依赖低层次模块,而是基于抽象。这一原则可以保证耦合度
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- System.out.println()和System.out.print()区别 2020-06-10
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- Java生鲜电商平台-生鲜电商接口幂等性原理与防重复提交方案( 2020-06-05
- Java连载120-反射机制获取构造方法和父类、父接口 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash