1、关于抽象类和接口
一、 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类,抽象类有构造函数但是不能调用
二、 接口里的变量 即使你不声明 也默认的是 public static final 修饰的,接口中的方法也都是抽象方法,默认的都是 public abstract 方法
三、 抽象类只能实现单继承,但是 接口却可以实现多继承
2、抽象类有构造函数而接口没有构造函数,为什么那?
解释1、
构造方法提供了实例化一个具体东西的入口,而接口只是用来表述动作,表述规范来的。
你可以new一台computer,但你无法new一个IDE、SATA、PCI-E、PS-2。
因此,接口要构造方法何用?
解释2、
接口是为相关的实体对象提供交流的工具,也是一个对功能比较清晰、细节实现模糊的动作的抽象概念。接口中不能定义任何方法体,即使是空的方法体。虽然接口也可以有数据成员(public static final类型),但这很少用,而且接口的数据域成员是无法被继承下来,接口的约束非常强,使用时直接“接口名.数据成员”。
很多人都想对着天空喊:“我要飞得更高!”,可是飞只是一个笼统的概念,你可以象麻雀一样叽叽喳喳地飞,可以象雄鹰一样大鹏展翅地飞,可以象火箭一样一飞冲天地飞,不知道你要怎么飞之前,你只是定义了一个接口“飞”,等你真得要以某种具体方式飞了,你再实际去定义它。如果你定义了一个实际要飞的类,那么implements这个“飞”的接口,你不飞也得实现“飞”。再如数据库的几大接口:Driver,Connection, Statement, ResultSet,它们好象程序开发早期协议,因为数据库产品众多,只能提供最上层的功能定义,具体实现由数据库产品去实现。再打个比方,我学了C驾照,但小驾车有很多,刹车的内部结构实现都会有不一样的地方,我只需要知道,我的右脚搁在中间的踏板上踩一下就可以实现刹车,我管你里边用什么传动机构,用油压还是水压,如果踩一脚没刹住,我只能说汽车公司没有实现“刹车”的接口,退车。
接口是一种高层抽象规范,定义了一种统一的公共行为的准则,大家默认这个接口主要是负责什么,接口里的方法是用来实现什么,接口的方法使你严格使用它的返回类型,符合方法的参数类型,参数个数,参数顺序。
而抽象类除这种纯属概念的动作之外,还可以有具体实现的动作,还可以有自己的属性。如食品是什么?那是一个抽象概念,食品可以是米饭、鱼肉、饮料、鸭肉、猪肉等。食品有他的属性,如可不可以生吃,保质期等。食品可以“吃”,那么吃就可以定义成更加抽象的接口,从这个角度来说接口是层次更高的抽象类。含有abstract方法的必须是抽象类,抽象类并不一定要有abstract方法。实现抽象类时,一般会扩展自己的属性,如,实现“食品”的鱼,它肯定有自己的特性,才会在你的头脑中形成这种形象,如红鲤鱼,它有颜色特性。抽象类中可以有实体方法,但实体类中绝不可以有抽象方法。
说到抽象类,还是区别这两种情况,抽象类与构造方法全部私有的情况。大家可能会误认为既然构造方法为私有,也就是无法进行实例化,那么与抽象类有何区别。它们的区别在于:1)抽象象没有实体对象,而构造方法全私有时,可以通过成员方法返回实体对象,最典型是Class类,构造方法private Class(),通过newInstance()可以返回此类的对象。还有设计模式的单例模式。2)抽象方法必须有非私有的构造方法,继承类必须至于调用其中一个构造方法。全私有既然构造方法全私有,那么就封闭了向下继承的道路。因为final与abstract毕竟是一对冤家,有你没有我因为final与abstract毕竟是一对冤家,有你没有我,有我没有你。如果一个类只有静态方法,不用来随意实例化,不想被继承,那么采用final类+构造方法全私有。如果你的类想被扩展,请用抽象类吧。3)抽象类有点像接口,可以实现面向接口开发,也就是咱们平常遇到的向上转型。
WindowListener是接口,里边很好几个方法,如果用implements实现它,即使你用不到的方法,你也必须用空方法体,在你要实现的类中。WindowAdapter就解决了这个问题,它是一个抽象类,号称实现了WindowsListener的接口,但里边方法均为空方法体,用户extends它时,只需实现自己关心的方法就可以。
在很多参数的表示上,都是用接口或者抽象类来表示,给传入的参数更多的自由空间,只要可以向上传型为表示的接口或者抽象类都可以。以前还以为这样写法是错误的,接口或者抽象类又不能生成对象怎么做参数。 接口设计遵循ISP“接口独立原则”(Interface Segregation Principle),固有的方法均勿与延伸的方法混淆起来。对于接口,用户关心的是了解这种接口中方法功能即可,接口是一种设计重用,而继承是一种代码重用。在实际开发设计时,接口更加常用。
- 浏览: 1222797 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (706)
- 全部博客(10000) (0)
- java基础 (123)
- 算法及数据结构 (64)
- SSH框架整合与平台系统分析 (11)
- j2ee (46)
- Oracle (95)
- SQL Server (11)
- javaScript (73)
- Ajax (22)
- jQuery (39)
- ExtJs (4)
- jsp (13)
- Servlet (6)
- struts1 (2)
- struts2 (33)
- Ibatis (2)
- hibernate (24)
- Spring (11)
- 设计模式 (8)
- 正则表达式 (9)
- UML (0)
- XML (9)
- linux (19)
- CSS (11)
- FreeMarker (4)
- nginx 与 memcached (6)
- SEO (5)
- Web 服务器 (11)
- junit 与 selenium2 (4)
- MyEclipse 有关的问题 (24)
- 生活杂感 (37)
- 看过的书 (2)
- 技术牛人 (2)
- 需要优化的例子 (3)
- English 学习 (7)
- bug修改的解决方法 (2)
- 数据库实战经验总结 (1)
- 期待解决的问题 (20)
- 等待自己学习的东西 (15)
- 自己公司代码结构总结 (15)
- 企业经营之道 (23)
- 工具管理 (1)
- 世范水晶 (2)
最新评论
-
hustkeai:
第一个方法是不对的
求一个Map中最大的value值,同时列出键,值 -
qq591920734:
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
qq591920734:
[color=orange][/color]包女包女不女
java List 排序 Collections.sort() 对 List 排序(首先年龄排序,如果年龄相同,则按名字排序) -
timer_yin:
seagrave 写道这个算法想法不错,但太耗时,我用1、2、 ...
用1、2、2、3、4、5这六个数字,数字排序经典算法 -
hellostory:
日常生活中,我们都不按你上面的那个方法算的!!!
JAVA小函数-计算日期差
发表评论
-
char 与 byte 互转
2013-10-21 16:24 1048char转byte char a='a'; byte b= ... -
全局变量 与 局部变量 赋值的问题
2013-09-18 11:48 1793全局变量: (1)在java中,类的全局变 ... -
java堆与栈 java String分配内存空间(详解)
2013-09-17 14:07 2070java堆栈 (转) jav ... -
int 与 Integer 什么情况下,必须分开用。
2013-09-17 00:23 18871、定义变量的时候。 double u= ... -
将一个交错数据合并为一个一维数组
2013-09-16 23:42 1127题目: 将一个交错数据合并为一个一维数组 输入: strJ ... -
ArrayList,LinkedList使用场景及性能说明
2013-09-14 11:06 1004Java面试中关于容器类List,Set是必问题目。但在我的 ... -
ArrayList和LinkedList(转)
2013-09-14 01:27 1028对于处理一列数据项, ... -
java 连接池的实现过程
2013-09-12 21:39 836java 连接池的实现过程 -
数据库 查询成绩及格的人
2013-09-11 22:53 9891、建表结构 -- 创建表create table ... -
关于接口的定义
2013-09-10 22:15 901关于接口的定义: 1、接口 Illegal modifi ... -
在JAVA中一共有八种基本数据类型。
2013-09-09 20:26 1718在JAVA中一共有八种基本数据类型。 他们分别是by ... -
字节与字符的关系
2013-09-07 14:44 14451、字节(Byte):通常将可表示常用英文字符8位二进制称为一 ... -
java访问权限是什么?
2013-09-06 12:38 9321、private修饰词,表示成员是私有的,只有自身可以访问 ... -
java 子类重写父类的方法
2013-09-05 23:24 0java 子类重写父类的方法 若想实现一个合格重写方法,而 ... -
java变量,初始化快,构造函数的执行顺序
2013-09-05 23:11 940重载就是在同一个类中方法名字一样,参数列表不一样对返 ... -
CAS实现单点登录(SSO)经典完整教程
2013-09-04 23:23 1280CAS实现单点登录(SSO)经典完整教程 ... -
查找 字符串中 重复字符最多的个数
2013-09-03 12:13 1428public static void main(String[ ... -
java synchronized详解
2013-09-03 11:01 808一直对这些不是很懂。找了一下,看一下,供我以后再看: 第一 ... -
HashMap学习
2013-09-03 10:59 9431. HashMap概述: HashMap是基于哈希 ... -
Java中对Map(HashMap,TreeMap,Hashtable等)的排序
2013-09-03 10:57 1760Map hostpowerMap = new HashMap ...
相关推荐
### 关于抽象类和接口的两篇不错文章 #### 一、理解抽象类与接口的基础概念 在面向对象编程中,抽象类与接口是两个重要的概念,它们在Java语言中有着特殊的实现方式。抽象类(Abstract Class)和接口(Interface)...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
这里我们将详细讨论这些概念以及抽象类与接口之间的相同点和区别。 首先,让我们来看看抽象类(Abstract Class): 1. 抽象方法是只有声明没有实现的方法,可以视为没有方法体的虚方法。例如: ```csharp public ...
抽象类和接口实验报告
Java中的类、抽象类和接口的区别和联系
在编程领域,抽象类和接口是面向对象设计中的两个重要概念,它们用于实现代码的抽象和多态性。本实验旨在帮助你深入理解和熟练运用这两种机制。 首先,让我们来看看抽象类。抽象类是一种不能被实例化的类,它通常...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...
在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...
### 抽象类和接口的区别分析 在面向对象编程中,抽象类与接口都是实现代码复用和提高软件模块化的重要工具。它们各自拥有独特的特性和应用场景,掌握这些概念对于编写高质量、可维护性强的代码至关重要。下面我们将...
本项目主要包括项目开发环境搭建、不同功能的类的设计、抽象类的设计、接口的设计、及其继承抽象类重写和接口实现类等具体功能的实现。 ●工程项目搭建与游戏初始化功能实现(2学时) ; ●动物城成员列表与动物信息...
在C#编程语言中,抽象类和接口是实现面向对象编程(OOP)中的多态性和代码重用的关键概念。本文将深入探讨这两个概念,并解释它们在C#中的使用方式和区别。 ### 抽象类 抽象类是一种特殊的类,它不能被实例化,其...
Java抽象类与接口实验报告
在C#编程语言中,抽象类和接口都是用于实现面向对象编程中多态特性的关键概念。它们都旨在为其他类提供一种定义行为和特性的模板或规范,但它们之间存在着重要的区别。本文将详细探讨C#中的抽象类与接口之间的差异,...
此书对于你学习Java抽象类和接口有非常大的帮助
在编程世界中,抽象类和接口是面向对象设计的重要概念,它们都用于实现代码的抽象和多态性,但有着不同的使用场景和规则。这里我们将深入探讨这两种机制,并结合给出的"codePiece"代码片段来分析它们在实际应用中的...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,为其他类提供模板或行为指南。让我们深入探讨这两个概念及其在Java中的应用。 首先,我们来理解抽象类。在Java中,抽象类是一...
简单介绍了抽象类和接口
"Java抽象类和接口和继承之间关系" Java抽象类和接口是两种不同的概念,它们之间存在着继承关系。在Java中,抽象类(abstract class)和接口(interface)都是用来描述对象的行为和状态的,但它们之间有着明显的...
在这个版本的更新日志中,我们可能找到关于抽象类和接口使用的具体例子,比如哪部分代码进行了重构以利用抽象类,或者引入了哪些新的接口以增强可扩展性。 抽象类和接口的使用有助于提高代码的可读性、可维护性和可...
在编程世界中,抽象类和接口是两种非常重要的概念,它们在实现代码的组织和设计模式上发挥着关键作用。本文将深入探讨抽象类与接口的异同,并结合实际应用场景来帮助理解这两种机制。 首先,让我们从定义开始。抽象...