Java基础知识系列之-抽象abstract
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相关推荐
- JAVA基础知识系列---进程、线程安全
1.1 临界区 保证在某一时刻只有一个线程能访问数据的简便方法,在任意时刻只允许一个线程对资源进行访问.如果有多个线程试图同时访问临界区,那么在有一个线程进入后,其他所有试图访问临界区的线程将被挂起, ...
- java基础知识系列---垃圾收集
1 为什么要使用垃圾回收机制? "垃圾收集"暗示程序不再需要的对象就是垃圾,可以被丢弃.更精确,更新的说法是"内存回收". 1.1 新对象的使用 当一个对象不再 ...
- 23篇大数据系列(一)java基础知识全集(2万字干货,建议收藏)
大数据系列爽文,从技术能力.业务基础.分析思维三大板块来呈现,你将收获: ❖ 提升自信心,自如应对面试,顺利拿到实习岗位或offer: ❖ 掌握大数据的基础知识,与其他同事沟通无障碍: ❖ 具备一定的 ...
- 跳槽者、应届生必看JAVA面试题系列 - JAVA基础知识(四)
一: 前言 莫等闲,白了少年头,空悲切. 二: 面试挑战 在文章开始前,首先安利下"面试挑战": 凡是满足下面的挑战条件的,如果一个月内没有拿到一个Offer的,免费提供简历封 ...
- (Java实习生)每日10道面试题打卡——Java基础知识篇
临近秋招,备战暑期实习,祝大家每天进步亿点点! 本篇总结的是Java基础知识相关的面试题,后续会每日更新~ 1.请你说一下什么是面向对象? Java是面向对象的编程语言,不同于C语言是面向过程的.对于 ...
- Java基础知识 廖雪峰教程笔记
Java基础知识 Java基础知识 java简介 名词解释 运行Java程序 Java基本数据类型 模块 包装类型 记录类 异常处理 Java异常 使用Commons Logging 使用log4j ...
- 学习java基础知识笔记
Java基础知识 第一章.Java基础入门 1.JDK的组成 2.什么是注释,注释有哪些,字面量,什么是变量 注释是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的.单行注释. ...
- Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...
- 【转】Java基础知识整理
本博文内容参考相关博客以及<Java编程思想>整理而成,如有侵权,请联系博主. 转载请注明出处:http://www.cnblogs.com/BYRans/ PDF版下载链接:<Ja ...
最新文章
- 诺基亚发布首款高功率小基站SCORE以及Flexi Zone LWA支持能力
- vite打包编译后类名混淆冲突问题处理
- 52Exchange 2010升级到Exchange 2013-升级SH站点Ex2010到2013
- 一行命令搭建内部的管道
- linux中修改字符编码
- 前端笔记-分享一个web后台登录及注册页面
- C语言 判断一个数是否为素数
- 国际认可不断增加,国产数据库发展与应用前景如何?
- Ubuntu下安装Flask虚拟环境及使用
- android arraymap排序,内存优化之ArrayMap、SparseArray、SparseIntArray
- 数据中心与灾备中心建设总结
- 移动硬盘无法读取分区表修复RAW格式修复
- android热修复原理总结
- 《黑白团团队》第九次团队作业:Beta冲刺第三天
- 2020-08-15
- Excel也能制作电子印章,你见过吗?学会了职场不求人
- 驱动开发:实现字符设备
- 《全球通史》读书笔记1
- react前端项目_如何使用React前端设置Ruby on Rails项目
- python如何解析网页的json_python 如何从网页jQuery中爬取JSON中的内容