关闭

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

标签: java抽象
1043人阅读 评论(0) 收藏 举报
分类:

抽象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)接口,可以实现多个接口。类可以继承类,只能继承一个类。
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6857次
    • 积分:373
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类