- 浏览: 43705 次
- 性别:
- 来自: 北京
最新评论
-
yxl2005play:
不支持多个文件(多个<input type=" ...
JAVA上传文件进度条的实现 -
clarck_913:
您好,我看了你附件里的代码
有点疑问。
第一,web.xm ...
JAVA上传文件进度条的实现
抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。
比如:我们要描述“水果”,它就是一个抽象,它有质量、体积等一些共性(水果有质量),但又缺乏特性(苹果、橘子都是水果,它们有自己的特性),我们拿不出唯一一种能代表水果的东西(因为苹果、橘子都不能代表水果),可用抽象类来描述它,所以抽象类是不能够实例化的。当我们用某个类来具体描述“苹果”时,这个类就可以继承描述“水果”的抽象类,我们都知道“苹果”是一种“水果”。
在面向对象领域,抽象类主要用来进行类型隐藏。我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为这个抽象类的所有派生类。
接口和抽象类中的所有抽象方法不能有具体实现,而应在它们的子类中实现所有的抽象方法(要有函数体,哪怕{ }里是空的),java的设计者可能为抽象方法的灵活性考虑,每个子类可根据自己的需要来实现抽象方法。
抽象类(abstract class)的定义方式如下:
public abstract class AbstractClass //里面至少有一个抽象方法
{
public int t; //普通数据成员
public abstract void method1(); //抽象方法,抽象类的子类在类中必须实现抽象类中的抽象方法
public abstract void method2();
public void method3(); //非抽象方法
public int method4();
publi int method4 (){
…… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
}
public void method3(){
…… //抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
}
}
接口(interface)的定义方式如下:
public interface Interface
{
static final int i; //接口中不能有普通数据成员,只能够有静态的不能被修改的数据成员,static表示全局,final表示不可修改,可以不用static final 修饰,会隐式的声明为static和final
public void method1(); //接口中的方法一定是抽象方法,所以不用abstract修饰
public void method2(); //接口中不能赋予方法的默认行为,即不能有方法的具体实现
}
简言之抽象类是一种功能不全的类,接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。
从某种意义上说,接口是一种特殊形式的抽象类,在java语言中抽象类表示的是一种继承关系,一个类只能继承继承一个抽象类,而一个类却可以实现多个接口。在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。
进一步理解,关于java引入抽象类、接口的目的,向高手请教得到的答复如下:
1、从类的层次结构上看,抽象类是在层次的顶端,但在实际的设计当中,一般来说抽象类应当是后面才会出现。为什么?实际上抽象类的获取有点像数学中的提取公因式:ax+bx,x就是抽象类,如果你没有前面的式子,你怎么知道x是不是公因式呢?在这点上,也符合人们认识世界的过程,先具体后抽象。因此在设计过程中如果你得到大量的具体概念并从当中找到其共性时,这个共性的集合就是抽象类应当是没错的。
2、interface从表面上看,和抽象类很相似,但用法完全不同。它的基本功能就是把一些毫不相关的类(概念)集合在一起形成一个新的、可集中操作的“新类”。我给学生的一个典型例子就是“司机”。谁可以当司机?谁都可以,只要领取了驾照。所以我不管你是学生,白领、蓝领还是老板,只要有驾照就是司机。
interface DriverLicence {
Licence getLicence();
}
class StudentDriver extends Student implements DriverLicence {
}
class WhtieCollarEmployeeDriver extends WhtieCollarEmployee implements DriverLicence {
}
class BlueCollarEmployeeDriver extends BlueCollarEmployee implements DriverLicence {
}
class BossDriver extends Boss implements Driver {
}
当我定义了“汽车”类后,我就可以指定“司机”了。
class Car {
setDriver(DriverLicence driver);
}
这时候,Car的对象并不关心这个司机到底是干什么的,他们的唯一共同点是领取了驾照(都实现了DriverLicence接口)。这个,应当是接口最强大的地方也是抽象类无法比拟的。
总结:抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。通常我们平时养成良好的习惯就是多用接口,毕竟java是单继承,不像C++,但是在需要使用抽象类的时候一定还是要用的(有点类似goto的用法),呵呵。
发表评论
-
Hibernate主键生成方式(转)
2008-01-29 22:05 5421) assigned 主键由外部程序负责生成,无需Hibe ... -
实现JSP页面自动跳转
2008-01-30 22:01 838HTML里增加: <meta http-e ... -
JAVA错误处理大集合
2008-03-15 17:19 7700、 需要标识符 a) 不在 ... -
强!!!
2008-04-01 17:51 688Java视频教程 孙鑫Java无难事 (全12CD) http ... -
字符转换 dos 命令 JDK自带的native2ascii工具完全揭密
2008-07-14 17:27 854背景:在做Java开发的时 ... -
Acegi安全系统的配置
2008-07-17 00:42 683Acegi 的配置看起来非常复杂,但事实上在实际项目的安全应用 ... -
ACEGI配置总结(1)
2008-07-18 18:39 731Acegi配置总结 1、 在web.xml中配置conte ... -
关于Struts处理异常框架的小例子
2008-07-30 17:15 750下午搞了一下Struts处理异常的框架,不错,确实很 ... -
利用commons upload+ffmpeg+mencoder完成视频的上传与转换
2008-07-31 16:41 700前一段时间朱哥一直在搞视频转换这个东东,我也一直很有 ... -
关于Struts的Token
2008-08-01 12:07 682请求有效性处理,使用令牌可以有效的防止重复提交。 protec ... -
六大代码问题检验你的JAVA知识(转)
2008-08-01 15:57 733你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了J ... -
Spring Security连接数据库查询实例
2008-08-04 00:46 898经过若干天断断续续地研究,终于做出了第一个sprin ... -
JAVA md5、SHA加密类
2008-08-04 20:25 863Code<!--<br /><br ... -
Hibernate获取数据方式与缓存使用
2008-08-16 11:03 671Hibernate获取数据的方式有不同的几种,其与缓存结合使用 ... -
使用AjaxTags实现自动完成
2008-09-22 09:42 1121最近搞的一个通讯录想要加一个Ajax的自动完成功能, ... -
Struts2&Jquery 新闻发布
2009-03-16 17:48 1009又一个新闻发布......比以前的更加人性化了,用到了Stru ... -
JAVA实现精确的加减乘除
2009-05-20 17:13 1130package lc.util; import java.ma ... -
JAVA上传文件进度条的实现
2009-08-03 19:46 5197很久不在这里发帖子了,最近在家闲来无事,想到转视频的那东西又要 ... -
利用commonsfileupload+ffmpeg+mencoder完成视频的上传与转换(2)
2009-08-04 17:45 955这两天完善了一下视频 ... -
利用commons upload+ffmpeg+mencoder完成视频的上传与转换
2008-07-31 16:41 917前一段时间朱哥一直在搞视频转换这个东东,我也一直很有 ...
相关推荐
抽象类可以被视为系统实现过程中的中间产品,它已经实现了一些系统功能(即那些在抽象类中已经提供了实现的方法),但这个产品仍然不能作为最终产品使用,还需要进一步完善(即继承)。这种完善可能有多种不同的方式...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
在 LivingThing 抽象类中,我们定义了一个抽象方法 dance(String dancingStyle),然后在 Human 和 Monkey 中实现了该方法。在 PersonInterface 接口中,我们定义了一个抽象方法, 然后在 Person 类中实现了该方法。 ...
11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别.zip11.java接口和抽象类的区别....
5. **默认方法**:Java 8引入了默认方法,接口中可以有带有实现的默认方法,而抽象类中则可以自由添加非抽象方法。 6. **设计意图**:抽象类通常表示“is-a”关系,而接口更倾向于“can-do”或“behaves-like-a”...
10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和抽象类的相似性.zip10.java接口和...
在Java语言中,abstract class和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,...
Java中的类、抽象类和接口的区别和联系
java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例java抽象类与接口实例...
Java语言的接口与抽象类是面向对象编程中的关键概念,它们在设计模式和代码组织中起着重要作用。这里我们将深入探讨这两个概念,并分析它们的异同。 首先,接口(Interface)是Java中的一种特殊类型,它通过使用`...
3. 抽象类中的抽象方法没有具体实现,但可以提供默认实现。接口中的方法默认是抽象的,不能有实现,除非使用Java 8及更高版本的默认方法和静态方法。 其次,从编程角度来看: 1. 继承抽象类意味着类与抽象类之间...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,为其他类提供模板或行为指南。让我们深入探讨这两个概念及其在Java中的应用。 首先,我们来理解抽象类。在Java中,抽象类是一...
Java抽象类与接口实验报告
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...
Java接口和抽象类是两种重要的面向对象编程概念,它们在软件设计中扮演着关键角色,主要用来实现多态性和代码的可扩展性。虽然两者都用于定义类的行为,但它们之间存在着显著的区别。 首先,接口是一种完全抽象的...
3. 方法实现:抽象类中的抽象方法可以有默认实现,而接口中的方法没有默认实现,除非是在Java 8及以上版本中引入的默认方法和静态方法。 4. 访问修饰符:抽象类中的方法可以有不同的访问修饰符,而接口中的所有方法...
在Java语言中,abstract class 和interface 是支持抽象类定义的两种机制区别
Java接口和抽象类都是实现面向接口编程的重要工具,它们各有优缺点,在实际开发中应根据需求灵活选择。接口适合定义行为规范,而抽象类则更适合提供部分实现或共享状态。合理运用这两种机制,可以使程序更加模块化、...
抽象类中可以包含抽象方法(没有实现的方法)和非抽象方法(即具体方法)。一个类如果包含了抽象方法,则该类必须声明为抽象类。抽象类的主要用途是作为其他类的基础类,通过继承抽象类来实现或重写其中的抽象方法。...
抽象方法是指在抽象类中声明的方法,但没有具体的实现。子类必须实现抽象方法,否则子类也将是一个抽象类。 例如,我们可以定义一个抽象类“水果(Fruit)”,它有几个子类“苹果(Apple)”、“橘子(Orange)”、...