Java中的抽象(Abstract)学习总结

原创 2015年11月19日 15:46:14

抽象Abstract:在Java程序设计中,利用Abstract关键字来进行抽象,抽象的目的或者说好处,是1.把对象的共性抽取出来,使得代码编写简洁,容易维护。2.定义一系列规范(方法),继承抽象类的实体类必须满足这些规范(实现抽象方法),这是复杂系统的基础。3.好的抽象应该就是现实世界的反映,把共性封装成抽象类,但又不存在于现实世界所以不可能实例化。

抽象的实现是通过Abstract修饰抽象类,Abstract修饰方法,或者通过接口来实现。一般都可以认为接口也是一种抽象,只是在使用规则,编程思想上有一些区别,但是他们的目的都是一样的。

  1. abstract Class表示一个类是抽象类,抽象类是不能被实例化的。抽象类里可以只有抽象方法,也可以只有具体方法,或两者兼有。
  2. abstract修饰方法表示一个无实现逻辑的方法。这个就是定义的一个规范,是等着继承类去实现的。
  3. 接口是一种特殊的抽象类,abstract关键字对接口和接口内的方法都是默认存在的(即abstract interface 和interface完全等价)。接口里不能有具体方法。

通过上述三者实现了抽象体系,达到抽象的目的。抽象的使用随处可见,可以分析java.util包,对集合类使用的抽象是很好的例子。


下面列出抽象必须弄清楚的问题:

  1. 抽象方法不可脱离抽象类,或者说,有抽象方法则一个类自动成为抽象类。继承一个抽象类却只部分实现其中的抽象方法,那么这个类也只能还是一个抽象类,直至全部实现。
    反之一个抽象类却可以没有抽象方法,你或许奇怪那这是抽的什么象呢?这种用法还是存在的,其目的是不希望这个类被实例化。这种形式在Spring源码中实现单例模式就用到了。
  2. 抽象类也可以继承实体类,也可以实现接口,没有什么特别的限制。
  3. 抽象方法,接口里的方法,必须被重写实现,所以必须是public的。接口里可以有成员变量,但是必须(默认)是public static final的。
  4. 我们会在抽象类的非抽象方法中看到this。this代表的是对象本身,是和实例化有关的。如果抽象类不能被实例化,那么方法中的this是指什么呢?static方法,抽象方法中肯定不能有this,所以普通方法中的this肯定是由实例化对象调用的,所以这里的this,就是继承抽象类的实体类本身。 ps:实际上在普通类之间的继承,子类调用父类方法时碰到this也是指之类本身。
  5. 抽象类可以是static的(内部类才能使用static),但是抽象方法却不能是static的,因为抽象方法就是为了重写。

我们在什么时候使用抽象类,什么时候使用接口呢?并没有严格的语法规范,根据实际经验来选择。从编程思想上说,结合现实世界,抽象类表明子类和其是一脉相承的,is-a的关系。而接口是表明实现类持有接口的某项功能,has-a的关系。


附带再列出类和接口的一些相互关系,不管是抽象还是实体类都遵从下面的法则:

  1. 接口只能继承(extends)接口,还可以继承多个接口,用逗号分隔。接口不能继承类。
  2. 类只能实现(implements)接口,可以实现多个接口。类可以继承类,只能继承一个类。

JAVA的abstract修饰符 && 接口interface用法 && 抽象类和interface的差别

abstract修饰符可以修饰类和方法。 (1)abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型(见后面实例),也就是编译时类型。抽象类就相当于...
  • zhandoushi1982
  • zhandoushi1982
  • 2013年01月01日 22:26
  • 24162

Java关键字之abstract(抽象类的概念和使用)

1、概述 (1)只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。使用 abstract 修饰符来表示抽象方法和抽象类。 (2)abstrac...
  • eff666
  • eff666
  • 2016年08月26日 08:59
  • 4900

Java关键字abstract

abstract 关键字可以修饰类或方法。 abstract 类可以扩展(增加子类),但不能直接实例化。 abstract 方法不在声明它的类中实现,但必须在某个子类中重写。 示例   p...
  • oh_Mourinho
  • oh_Mourinho
  • 2012年11月23日 11:56
  • 26047

java中abstract怎么使用

用j2se的低级ui封装了textview, list, editbox, tablepanel,和滚动条,全部搞定
  • aaaaatiger
  • aaaaatiger
  • 2010年07月23日 15:42
  • 23526

Java中的abstract方法和abstract类的问题

当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义。 抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法。 抽象类存...
  • dlwh_123
  • dlwh_123
  • 2014年11月20日 10:37
  • 10857

java提高篇(四)-----抽象类与接口

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。        抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两...
  • chenssy
  • chenssy
  • 2013年10月18日 21:04
  • 142441

Java 中对抽象的认识

抽象也是Ja va的四大特征之一,如果类可以被实例化成具体的对象,这个类就是具体类,反之抽象类是指不能被实例化的类.在抽象类中,类的所有其他功能都存在,成员变量,方法,构造器等都可以用同样的方式访问,...
  • luoxl81
  • luoxl81
  • 2011年11月09日 14:14
  • 1923

Java抽象类 详解

一、抽象类的基本概念普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部...
  • wei_zhi
  • wei_zhi
  • 2016年10月05日 00:06
  • 23685

Java千百问_05面向对象(003)_java中抽象概念如何体现的

点击进入_更多_Java千百问1、抽象是什么抽象,和具体对立,定义了事物的性质,事物的性质会随着抽象概念的改变而改变。2、java中的抽象类是什么java中最直接抽象概念的应用就是抽象类和接口,这里我...
  • ooppookid
  • ooppookid
  • 2016年04月16日 20:53
  • 4917

java抽象类

JAVA抽象类的理解:1、普通的JAVA类也可以在CLASS前加ABSTRACT声明为抽象,只不过此时的该类不再可以实例化。2、如果一个类里有一个以上的抽象方法,则该类必须声明为抽象类,该方法也必须声...
  • zdwzzu2006
  • zdwzzu2006
  • 2010年08月22日 23:47
  • 11968
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的抽象(Abstract)学习总结
举报原因:
原因补充:

(最多只允许输入30个字)