1.何为抽象

抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象,我们不能把它们实例化(拿不出一个具体的东西)所以称之为抽象。
  比如:我们要描述“水果”,它就是一个抽象,它有质量、体积等一些共性(水果有质量),但又缺乏特性(苹果、橘子都是水果,它们有自己的特性),我们拿不出唯一一种能代表水果的东西(因为苹果、橘子都不能代表水果),可用抽象类来描述它,所以抽象类是不能够实例化的。当我们用某个类来具体描述“苹果”时,这个类就可以继承描述“水果”的抽象类,我们都知道“苹果”是一种“水果”。

2.知识点

2.1抽象类和普通类的区别是抽象类有一个抽象方法,如下代码可解疑惑

 1 abstract class A{    // 是定义了一个抽象类
 2     public static final String FLAG = "CHINA" ;    // 全局常量
 3 private String name = "张三" ; // 定义一个普通的属性  4  public void setName(String name){  5 this.name = name ;  6  }  7  public String getName(){  8 return this.name ;  9  } 10 public abstract void print() ; // 定义抽象方法 11  //构造方法 12  public A(){ 13 14  } 15 };

2.2抽象类不能直接被实现,即new

2.3抽象类必须被子类实现

2.4抽象类不能使用用final进行声明

2.5抽象类中可以存在构造方法,以及super关键字的使用,如下代码可解疑惑

 1 package com.hhb.q;
 2 abstract class Person{
 3     private String name ;        // 定义name属性
 4     private int age ;            // 定义age属性
 5     public Person(String name,int age){
 6         this.name = name ;
 7         this.age = age ;
 8     }
 9     public void setName(String name){
10         this.name = name ;
11     }
12     public void setAge(int age){
13         this.age = age ;
14     }
15     public String getName(){
16         return this.name ;
17     }
18     public int getAge(){
19         return this.age ;
20     }
21     public abstract String getInfo() ;    // 抽象方法
22 };
23 class Student extends Person{
24     private String school ;
25     public Student(String name,int age,String school){
26         super(name,age) ;    // 指定要调用抽象类中有两个参数的构造方法
27         this.school = school ;
28     }
29     public void setSchool(String school){
30         this.school = school ;
31     }
32     public String getSchool(){
33         return this.school ;
34     }
35     public String getInfo(){
36         return    "姓名:" + super.getName()  +
37                 ";年龄:" + super.getAge() +
38                 ";学校:" + this.getSchool() ;
39     }
40 };
41 public class AbstractDemo04{
42     public static void main(String args[]){
43         Student stu = new Student("张三",30,"清华大学") ;
44         System.out.println(stu.getInfo()) ;
45     }
46 };

3.抽象类与接口的区别

  • 一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于Java语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java接口的优势就出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个Java接口,从而这个类就有了多种类型。(使用抽象类,那么继承这个抽象类的子类类型就比较单一,因为子类只能单继承抽象类;而子类能够同时实现多个接口,因为类型就比较多。接口和抽象类都可以定义对象,但是只能用他们的具体实现类来进行实例化。)
  • 从第2点不难看出,Java接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。
  • 结合1、2点中抽象类和Java接口的各自优势,具精典的设计模式就出来了:声明类型的工作仍然由Java接口承担,但是同时给出一个Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个Java接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。在Java语言API中用了这种模式,而且全都遵循一定的命名规范:Abstract  +接口名。(A extends AbstractB implements interfaceC,那么A即可以选择实现(@Override)接口interfaceC中的方法,也可以选择不实现;A即可以选择实现(@Override)抽象类AbstractB中的方法,也可以选择不实现)
  • Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以(就是interface中只能定义方法,而不能有方法的实     现,而在abstract class中则可以既有方法的具体实现,又有没有具体实现的抽象方法),这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象         类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个 新方法,所有实现这个接口 的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。

转载于:https://www.cnblogs.com/hanhuibing/articles/4086913.html

Java基础知识系列之-抽象abstract相关推荐

  1. JAVA基础知识系列---进程、线程安全

    1.1 临界区 保证在某一时刻只有一个线程能访问数据的简便方法,在任意时刻只允许一个线程对资源进行访问.如果有多个线程试图同时访问临界区,那么在有一个线程进入后,其他所有试图访问临界区的线程将被挂起, ...

  2. java基础知识系列---垃圾收集

    1 为什么要使用垃圾回收机制? "垃圾收集"暗示程序不再需要的对象就是垃圾,可以被丢弃.更精确,更新的说法是"内存回收". 1.1 新对象的使用 当一个对象不再 ...

  3. 23篇大数据系列(一)java基础知识全集(2万字干货,建议收藏)

    大数据系列爽文,从技术能力.业务基础.分析思维三大板块来呈现,你将收获: ❖ 提升自信心,自如应对面试,顺利拿到实习岗位或offer: ❖ 掌握大数据的基础知识,与其他同事沟通无障碍: ❖ 具备一定的 ...

  4. 跳槽者、应届生必看JAVA面试题系列 - JAVA基础知识(四)

    一: 前言 莫等闲,白了少年头,空悲切. 二: 面试挑战   在文章开始前,首先安利下"面试挑战": 凡是满足下面的挑战条件的,如果一个月内没有拿到一个Offer的,免费提供简历封 ...

  5. (Java实习生)每日10道面试题打卡——Java基础知识篇

    临近秋招,备战暑期实习,祝大家每天进步亿点点! 本篇总结的是Java基础知识相关的面试题,后续会每日更新~ 1.请你说一下什么是面向对象? Java是面向对象的编程语言,不同于C语言是面向过程的.对于 ...

  6. Java基础知识 廖雪峰教程笔记

    Java基础知识 Java基础知识 java简介 名词解释 运行Java程序 Java基本数据类型 模块 包装类型 记录类 异常处理 Java异常 使用Commons Logging 使用log4j ...

  7. 学习java基础知识笔记

    Java基础知识 第一章.Java基础入门 1.JDK的组成 2.什么是注释,注释有哪些,字面量,什么是变量 注释是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的.单行注释. ...

  8. Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO

    Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...

  9. 【转】Java基础知识整理

    本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...

最新文章

  1. 诺基亚发布首款高功率小基站SCORE以及Flexi Zone LWA支持能力
  2. vite打包编译后类名混淆冲突问题处理
  3. 52Exchange 2010升级到Exchange 2013-升级SH站点Ex2010到2013
  4. 一行命令搭建内部的管道
  5. linux中修改字符编码
  6. 前端笔记-分享一个web后台登录及注册页面
  7. C语言 判断一个数是否为素数
  8. 国际认可不断增加,国产数据库发展与应用前景如何?
  9. Ubuntu下安装Flask虚拟环境及使用
  10. android arraymap排序,内存优化之ArrayMap、SparseArray、SparseIntArray
  11. 数据中心与灾备中心建设总结
  12. 移动硬盘无法读取分区表修复RAW格式修复
  13. android热修复原理总结
  14. 《黑白团团队》第九次团队作业:Beta冲刺第三天
  15. 2020-08-15
  16. Excel也能制作电子印章,你见过吗?学会了职场不求人
  17. 驱动开发:实现字符设备
  18. 《全球通史》读书笔记1
  19. react前端项目_如何使用React前端设置Ruby on Rails项目
  20. python如何解析网页的json_python 如何从网页jQuery中爬取JSON中的内容

热门文章

  1. 持续爆点:一对一直播和短视频
  2. processing实现图像碎片化
  3. 权限认证实现(责任链模式)
  4. COGS 2815. 天黑请闭眼
  5. 大明最不该被遗忘的英烈——李定国
  6. 独家 | A/B测试的定义、操作方法、案例与实用工具分享
  7. Python简单GUI(模拟放大镜)
  8. I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之声卡驱动移植
  9. 美国国土安全部和MSF相继发布了Citrix漏洞的测试利用工具
  10. Linux入门-1.vim格式设置