Java基础:抽象类和接口
转载请注明出处:jiq•钦's
technical Blog
一、引言
基于面向对象五大原则中的以下两个原则,我们应该多考虑使用接口和抽象类:
里氏替换原则:子类能够通过实现父类接口来替换父类,所以父类应尽可能实现为接口/抽象类。方便拓展程序而不影响现有代码。
依赖倒置原则:和结构化设计不同,我们要让底层依赖于高层。而不是相反。
而设计接口和抽象类时尽量遵循面向对象五大原则中的“接口隔离原则”。即使用专门接口比使用单一接口好。这个准则和针对类设计的“单一职责原则”相应。
备注:设计模式中有非常多和接口和抽象类相关的模式。比方抽象工厂、模板方法等。
二、概念
抽象类(AbstractClass)
(1)抽象类提供通用结构,并阻止用户对其进行实例化;
(2)尽管抽象类不能被实例化,可是其仍然有构造函数。
------为什么???
(3)假设你继承自一个抽象类,那么你仅仅有两种选择:实现基类中全部抽象方法;声明自己为抽象类。
(4)假设你想让全部导出类复写或者实现某个方法。那么你就能够将其声明为abstract强制导出类实现它。
(5)java不同意类的多重继承。可是能够实现多个接口。接口能够多重继承。
接口(Interface)
(1)接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。
(2)接口是一个全然抽象的类,没有提供不论什么详细的实现;
(3)接口变量:隐含是public。static和final的,即是一个全然的常量,初始化后便无法改变。在内存中仅仅有一份。
(4)接口方法:默认是public的;而普通类的方法(包含)构造器默认是包訪问权限的(protected)。
(5)接口本身:默认是包訪问权限protected的(继承訪问权限)。可是仅仅能用public
& abstract来修饰一个接口。
(6)多重继承:与类不一样。接口同意多重继承。一个接口能够同一时候继承多个接口。
(7)接口本身仅仅能被声明为public& abstract和。其它修饰符(private,
protected, static,final, transient& volatile)都是不同意的。
Java基础:抽象类和接口的更多相关文章
- Java基础——抽象类和接口
之所以将抽象类和接口放在一起做笔记,是因为他们之间很难区分又各自独立.在学习完Java程序设计的三大特点(封装.继承.多态)之后,我最大的收获是,慢慢理解了Java语言这种面向对象程序设计的优越性,它 ...
- 详解java基础--抽象类、接口与多态
抽象类.接口.多态都是面向对象中很基础的东西,我相信看到能本篇博客的人本不会再纠结它的基本定义了,本篇文章将尽量的更加深层次的挖掘其内涵,希望能对大家有帮助. 一.抽象类 1.形式 abstract ...
- Java基础-抽象类和接口
抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 抽象定义: 抽象 ...
- Java基础—抽象类和接口
1.抽象类 在Java语言中使用abstrac关键字来定义抽象类和抽象方法,抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号. public abstract class Employee { ...
- java基础-抽象类与接口(转)
抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 ...
- 《Java基础——抽象与接口》
Java基础--抽象与接口 一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...
- JAVA:抽象类VS接口
JAVA中抽象类和接口的区别比较,以及它们各自的用途. 1.JAVA抽象类: 抽象类除了不能实例化以外,跟普通类没有任何区别.在<JAVA编程思想>一书中,将抽象类定义为“包含抽象方法的类 ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
- 关于JAVA中抽象类和接口的区别辨析
今天主要整理一下新学习的有关于Java中抽象类和接口的相关知识和个人理解. 1 抽象类 用来描述事物的一般状态和行为,然后在其子类中去实现这些状态和行为.也就是说,抽象类中的方法,需要在子类中进行重写 ...
- Java基础-通过POI接口处理xls
Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
随机推荐
- Leetcode 482.密钥格式化
密钥格式化 给定一个密钥字符串S,只包含字母,数字以及 '-'(破折号).N 个 '-' 将字符串分成了 N+1 组.给定一个数字 K,重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符 ...
- rsync配置和同步数据
rsync的搭建配置1.环境和配置文件 rsyncd.conf(主配置文件) rsyncd.secrets(密码文件) pc1:192.168.0.1,rsync的服务器,配置rsyncd.conf文 ...
- Spring c3p0连接池配置
数据库连接池 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接 ...
- Welcome-to-Swift-18类型转换(Type Casting)
类型转换是一种检查类实例的方式,并且哦或者也是让实例作为它的父类或者子类的一种方式. Type casting is a way to check the type of an instance, a ...
- hihoCoder #1246 王胖浩与环
题目大意 $n$($1\le n\le 2000$)个正整数 $a_1, a_2, \dots, a_n$($a_i\le 5\times 10^7$)分布在一个圆环上. 定义 $b_k$ 为:将环上 ...
- Java众神之路(1)-语言介绍
Java语言介绍 1.Java的历史 我个人认为,学习一种技术,不止要关注技术本身,也应该去了解一下它的发展史,这一方面是对技术本身的尊重,另一方面也是希望能够通过该技术的发展历史推测出其未来可能的发 ...
- SystemServer分析
1 SystemServer分析 SystemServer的进程名就是前面所说的“system_server”,是zygote进程“app_process”fork出来的第一个子嗣,其重要性不言而喻. ...
- FZOJ Problem 2107 Hua Rong Dao
...
- net5:动态修改内存中的站点地图节点
原文发布时间为:2008-07-29 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- 应用js函数柯里化currying 与ajax 局部刷新dom
直接上代码吧 最近读javascript核心概念及实践的代码 感觉很有用 备忘. <div id="request"></div> <script t ...