转载请注明出处:jiq•钦's
technical Blog

一、引言

基于面向对象五大原则中的以下两个原则,我们应该多考虑使用接口和抽象类:

里氏替换原则:子类能够通过实现父类接口来替换父类,所以父类应尽可能实现为接口/抽象类。方便拓展程序而不影响现有代码。

依赖倒置原则:和结构化设计不同,我们要让底层依赖于高层。而不是相反。

而设计接口和抽象类时尽量遵循面向对象五大原则中的“接口隔离原则”。即使用专门接口比使用单一接口好。这个准则和针对类设计的“单一职责原则”相应。

备注:设计模式中有非常多和接口和抽象类相关的模式。比方抽象工厂、模板方法等。

二、概念

抽象类(AbstractClass)

(1)抽象类提供通用结构,并阻止用户对其进行实例化;

(2)尽管抽象类不能被实例化,可是其仍然有构造函数。

------为什么???

(3)假设你继承自一个抽象类,那么你仅仅有两种选择:实现基类中全部抽象方法;声明自己为抽象类。

(4)假设你想让全部导出类复写或者实现某个方法。那么你就能够将其声明为abstract强制导出类实现它。

(5)java不同意类的多重继承。可是能够实现多个接口。接口能够多重继承。



接口(Interface)

(1)接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。

(2)接口是一个全然抽象的类,没有提供不论什么详细的实现;

(3)接口变量:隐含是publicstaticfinal的,即是一个全然的常量,初始化后便无法改变。在内存中仅仅有一份。

(4)接口方法:默认是public的;而普通类的方法(包含)构造器默认是包訪问权限的(protected)。

(5)接口本身:默认是包訪问权限protected的(继承訪问权限)。可是仅仅能用public
& abstract
来修饰一个接口。

(6)多重继承:与类不一样。接口同意多重继承。一个接口能够同一时候继承多个接口。

(7)接口本身仅仅能被声明为public& abstract和。其它修饰符(private,
protected, static,final, transient& volatile)都是不同意的。

Java基础:抽象类和接口的更多相关文章

  1. Java基础——抽象类和接口

    之所以将抽象类和接口放在一起做笔记,是因为他们之间很难区分又各自独立.在学习完Java程序设计的三大特点(封装.继承.多态)之后,我最大的收获是,慢慢理解了Java语言这种面向对象程序设计的优越性,它 ...

  2. 详解java基础--抽象类、接口与多态

    抽象类.接口.多态都是面向对象中很基础的东西,我相信看到能本篇博客的人本不会再纠结它的基本定义了,本篇文章将尽量的更加深层次的挖掘其内涵,希望能对大家有帮助. 一.抽象类 1.形式 abstract ...

  3. Java基础-抽象类和接口

    抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 抽象定义: 抽象 ...

  4. Java基础—抽象类和接口

    1.抽象类 在Java语言中使用abstrac关键字来定义抽象类和抽象方法,抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号. public abstract class Employee { ...

  5. java基础-抽象类与接口(转)

    抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类    ...

  6. 《Java基础——抽象与接口》

    Java基础--抽象与接口       一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...

  7. JAVA:抽象类VS接口

    JAVA中抽象类和接口的区别比较,以及它们各自的用途. 1.JAVA抽象类: 抽象类除了不能实例化以外,跟普通类没有任何区别.在<JAVA编程思想>一书中,将抽象类定义为“包含抽象方法的类 ...

  8. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  9. 关于JAVA中抽象类和接口的区别辨析

    今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...

  10. Java基础-通过POI接口处理xls

    Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

随机推荐

  1. xml报错“cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element”

    配置使用dubbo时,xml报错“cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be ...

  2. 【LeetCode】Binary Tree Preorder Traversal(二叉树的前序遍历)

    这道题是LeetCode里的第144道题. 题目要求: 给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很 ...

  3. 测试openssl_encrypt

    <?php //$string = 'It works ? Or not it works ?'; //$pass = '1234'; //$method = 'aes128'; // // / ...

  4. google chrome & preferences & languages

    google chrome & preferences & languages language settings https://www.google.com/preferences ...

  5. 【Luogu】P2596书架(Splay)

    题目链接 通过这题我加深了对Splay的理解,原来Splay的子树也是可以接来接去接到别的点上的,而不是只能旋转qwq 具体接的办法就是swap大法. 对于Top操作我们把当前节点Splay到根,然后 ...

  6. 【Luogu】P3157动态逆序对(树状数组套主席树)

    题目链接 md第一道在NOILinux 下用vim做的紫题.由于我对这个操作系统不是很熟悉,似乎有什么地方搞错了,md调死.(我还打了两遍代码,调了两个小时) 但是这道题并不难,就是树状数组套上主席树 ...

  7. mysql监控指标

    1.最大连接数监控 show VARIABLES like "max_connections"; //最大连接数 show global status like 'Threads_ ...

  8. hdu 4353 统计点在三角形内的个数

    Finding Mine Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  9. best corder MG loves gold

    MG loves gold  Accepts: 451  Submissions: 1382  Time Limit: 3000/1500 MS (Java/Others)  Memory Limit ...

  10. 应用express mockjs模拟前端json数据接口

    一.首先需要在项目安装express 1.cnpm install express --save-dev  2.cnpm install mockjs --save-dev 二.在项目根目录下新建pr ...