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)接口,可以实现多个接口。类可以继承类,只能继承一个类。
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

abstract关键字详解

Abstract关键字详解 abstract关键字,抽象的,修饰类、方法修饰类: 1)不可被实例化,抽象类只能声明引用,不能创建对象 2)抽象类有构造器 (凡是类都有构造器) 当我们设计...

抽象类和抽象方法 abstract类和abstract方法

可以使用abstract来修饰一个类或者方法。 用abstract修饰的类表示这个类是一个抽象类,用abstract修饰的方法表示这个方法是一个抽象方法。 抽象类不能被实例化。 抽象...

Java抽象类 详解

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

设计模式(12)--State状态模式&Strategy策略模式

一个对象根据不同的状态,执行不同的行为。我们如何去编写执行行为的方法呢?用逻辑判断语句判断状态不同而执行不同的代码?显然不会选择这种耦合的复杂的逻辑。解耦是显而易见的,即把不同状态下的执行代码分离开来...
  • Face3
  • Face3
  • 2016-02-25 16:44
  • 251

抽象类与接口的区别

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和inte...
  • ttgjz
  • ttgjz
  • 2008-09-22 11:28
  • 26222

2016,Java成神初年

时间2016.12.31 01:51 地点K9004 5号车厢 1号下铺 此刻 深夜 不眠 回想 反思 规划! 工作快四年了,每年经历不同,心思不同!2013,从学生到职场人的转变,在长沙工作...

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

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

Java 中对抽象的认识

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

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

abstract修饰符可以修饰类和方法。 (1)abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型(见后面实例),也就是编译时类型。抽象类就相当于...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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