Java中abstract关键字详解
abstract只能修饰类(class) 和 方法。而不能修饰成员变量。这是由于抽象的概念确定的。只有类和方法可以抽象出来,而成员变量不需要抽象。
abstract修饰类
abstract之所以出现,是因为面向对象的思想所趋。在面向对象的思想中,不同的类之间可能具有高度相似的成员变量以及个别的方法。那么为了避免重复代码。我们需要将各个类之间高度统一的成员变量和方法抽象出来封装为一个抽象父类。它提供子类共有的域和方法。但是不给出具体实现。这就是abstract的来源。也正因为如此。abtract修饰的类不能被对象化。他的存在,只是为了子类去继承它。这样子类就不需要重复编写相同的代码(例如高度一致的域和函数)。
例如:Teacher(教师) 、Student(学生)、Singer(歌手) 三个类都有很多相同的属性和方法。例如,他们都有name(名字)、age(年龄)、address(地址)的属性。也都有eat(),sleep()等方法。如果我们不想在前面三个对象中都重复定义方法和域的话。我们可以把他们共有的东西抽象出来,定义一个父类。然后让三个子类去继承父类,来达到复用代码的作用。那么这时候肯定有朋友会问,那我这个父类能不能不要用abstract修饰呢,这样子类一样可以继承然后重写自己需要的方法呀。其实这里abstract的作用就和接口很像,他强制的让继承父类的子类重写抽象方法。防止你忘了重写,也提高代码的可读性。在抽象父类中可以很明显的看出哪些方法是需要子类来覆盖而那些方法是子类可以直接拿来共用的。
abstract修饰方法
当abstract修饰方法时,则该方法是抽象方法,而抽象方法只能存在于抽象类中。所以可以说,抽象方法一定存在于抽象类中,但是抽象类中可以不全是抽象方法,他还可以有其他方法。
那什么时候我们会把方法封装成抽象方法呢,一般当子类都要有该方法但是各个子类又有不同的实现的时候,我们就会使用抽象方法。强制保证子类继承父类的时候必须重写该方法。如果父类有一个方法各个子类的实现都相同时,那么父类就不必将其定义成抽象方法。将其定义成普通方法就可以了。子类继承就不必重写,直接就可以拿来用。
Java中abstract关键字详解的更多相关文章
- Java中Volatile关键字详解 (转自郑州的文武)
java中volatile关键字的含义:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 一.基本概念 先补充一下概念:J ...
- Java中Volatile关键字详解
一.基本概念 先补充一下概念:Java并发中的可见性与原子性 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值, ...
- Java中Volatile关键字详解(转载)
转载自:https://www.cnblogs.com/zhengbin/p/5654805.html 一.基本概念 先补充一下概念:Java 内存模型中的可见性.原子性和有序性. 可见性: 可见性是 ...
- Java中Static关键字详解以及静态变量和成员变量的区别
一.static关键字的特点 (1)修饰成员变量.成员方法(2)随着类的加载而加载(3)优先于对象存在(4)被所有对象共享(5)可以通过类名调用 它本身也可以通过对象名调用 例如:main()方法由j ...
- java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系
本文关键词: java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系 跳出循环 带标签的continue和break 嵌套循环 深入continue ...
- java中的注解详解和自定义注解
一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
- Java中dimension类详解
Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788
- [转载]java中import作用详解
[转载]java中import作用详解 来源: https://blog.csdn.net/qq_25665807/article/details/74747868 这篇博客讲的真的很清楚,这个作者很 ...
随机推荐
- JavaWeb基础之JdbcUtils工具类final
JdbcUtils工具类3.0最终版,添加了事务相关功能和释放链接.最终版本可以直接打成jar包,在后面的基本项目都会使用该工具类 1. JdbcUtils代码 /** * 最终版 * @author ...
- Unity编辑器下重启
我们项目AssetBundle打包走的是全自动化流程,打包之前要进行各种资源检测,如果检测顺利通过,则进入打包,否则提示错误资源名称及路径,打包中断!有时候即使资源检测通过也会打包崩溃,初步断定是Un ...
- 提纲挈领webrtc之NS(noise suppression)模块
Noise suppression,就是大家说的降噪.这种降噪是把人声和非人声区分开来,把非人声当成噪声. 一段包含人声和噪声的音频经过该模块处理,从理论上讲,只剩下人声了. webrtc的NS在业内 ...
- Hexo+Github搭建博客
要使用Hexo,需要在你的系统中支持Nodejs以及Git,如果还没有,那就开始安装吧! 安装Node.js 下载Node.js 参考地址:安装Node.js 安装Git 下载地址:http://gi ...
- php 守护进程类
最近个人项目中需要后台运行任务,之前一直是用nouhp & + 重定向输出 来后台跑任务,后来觉得不好维护原始数据,同时可能也没有直接操作进程那么稳吧(没验证).废话少说,来看分析. 首先,我 ...
- popup方法
popup方法: 一.创建一个页面 1.创建url和视图函数:: from django.shortcuts import render def p1(request): return render( ...
- RAID 构建
RAID的创建 第一步:先查看我们系统的磁盘情况 [root@station40 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda ...
- iOS初学,关于变量加下划线问题
为什么做ios开发,变量前要加下划线才有用? 看到这个哥们的解释后,终于明白了,转帖到此. 链接在此:http://www.cocoachina.com/bbs/read.php?tid=234290 ...
- 分布式学习(一)——基于ZooKeeper的队列爬虫
zookeeper 一直琢磨着分布式的东西怎么搞,公司也没有相关的项目能够参与,所以还是回归自己的专长来吧--基于ZooKeeper的分布式队列爬虫,由于没什么人能够一起沟通分布式的相关知识,下面的小 ...
- 对抗栈帧地址随机化/ASLR的两种思路和一些技巧
栈帧地址随机化是地址空间布局随机化(Address space layout randomization,ASLR)的一种,它实现了栈帧起始地址一定程度上的随机化,令攻击者难以猜测需要攻击位置的地址. ...