abstract只能修饰类(class) 和 方法。而不能修饰成员变量。这是由于抽象的概念确定的。只有类和方法可以抽象出来,而成员变量不需要抽象。

abstract修饰类

abstract之所以出现,是因为面向对象的思想所趋。在面向对象的思想中,不同的类之间可能具有高度相似的成员变量以及个别的方法。那么为了避免重复代码。我们需要将各个类之间高度统一的成员变量和方法抽象出来封装为一个抽象父类。它提供子类共有的域和方法。但是不给出具体实现。这就是abstract的来源。也正因为如此。abtract修饰的类不能被对象化。他的存在,只是为了子类去继承它。这样子类就不需要重复编写相同的代码(例如高度一致的域和函数)。

例如:Teacher(教师) 、Student(学生)、Singer(歌手) 三个类都有很多相同的属性和方法。例如,他们都有name(名字)、age(年龄)、address(地址)的属性。也都有eat(),sleep()等方法。如果我们不想在前面三个对象中都重复定义方法和域的话。我们可以把他们共有的东西抽象出来,定义一个父类。然后让三个子类去继承父类,来达到复用代码的作用。那么这时候肯定有朋友会问,那我这个父类能不能不要用abstract修饰呢,这样子类一样可以继承然后重写自己需要的方法呀。其实这里abstract的作用就和接口很像,他强制的让继承父类的子类重写抽象方法。防止你忘了重写,也提高代码的可读性。在抽象父类中可以很明显的看出哪些方法是需要子类来覆盖而那些方法是子类可以直接拿来共用的。

abstract修饰方法

当abstract修饰方法时,则该方法是抽象方法,而抽象方法只能存在于抽象类中。所以可以说,抽象方法一定存在于抽象类中,但是抽象类中可以不全是抽象方法,他还可以有其他方法。

那什么时候我们会把方法封装成抽象方法呢,一般当子类都要有该方法但是各个子类又有不同的实现的时候,我们就会使用抽象方法。强制保证子类继承父类的时候必须重写该方法。如果父类有一个方法各个子类的实现都相同时,那么父类就不必将其定义成抽象方法。将其定义成普通方法就可以了。子类继承就不必重写,直接就可以拿来用。

Java中abstract关键字详解的更多相关文章

  1. Java中Volatile关键字详解 (转自郑州的文武)

    java中volatile关键字的含义:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 一.基本概念 先补充一下概念:J ...

  2. Java中Volatile关键字详解

    一.基本概念 先补充一下概念:Java并发中的可见性与原子性 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值, ...

  3. Java中Volatile关键字详解(转载)

    转载自:https://www.cnblogs.com/zhengbin/p/5654805.html 一.基本概念 先补充一下概念:Java 内存模型中的可见性.原子性和有序性. 可见性: 可见性是 ...

  4. Java中Static关键字详解以及静态变量和成员变量的区别

    一.static关键字的特点 (1)修饰成员变量.成员方法(2)随着类的加载而加载(3)优先于对象存在(4)被所有对象共享(5)可以通过类名调用 它本身也可以通过对象名调用 例如:main()方法由j ...

  5. java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系

    本文关键词: java continue break 关键字 详解 区别  用法 标记  标签 使用 示例 联系   跳出循环 带标签的continue和break 嵌套循环  深入continue ...

  6. java中的注解详解和自定义注解

    一.java中的注解详解 1.什么是注解 用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override public Str ...

  7. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  8. Java中dimension类详解

    Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788

  9. [转载]java中import作用详解

    [转载]java中import作用详解 来源: https://blog.csdn.net/qq_25665807/article/details/74747868 这篇博客讲的真的很清楚,这个作者很 ...

随机推荐

  1. Kettle文本文件输出和输入控件使用中,换行符导致的问题处理

    1.如下图通过输入控件从数据库读取数据然后生成TXT文本文件,TXT文件生成原则是每一条数据生成一行数据,第二条数据换行保存 2.如下图所示,使用文本文件输入控件读入上图生成的文件,文件读入原则是按行 ...

  2. Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker

    准备工作(安装过程可以百度,已安装的可以跳过) a)     安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...

  3. Scrapy框架--Requests对象

    Scrapy使用request对象来爬取web站点. request对象由spiders对象产生,经由Scheduler传送到Downloader,Downloader执行request并返回resp ...

  4. Java—Day5课堂练习

    package com.lovo.classes;import java.util.Scanner;public class day5Test {    public static void main ...

  5. win10 uwp 存放网络图片到本地

    有时候我们的网络很垃圾,我的的UWP要在第一次打开网络图片,就把图片存放到本地,下次可以从本地打开. 有时候用户使用的是流量网络,不能每次都联网下载. 我们不得在应用存放用户打开的图片. 这就是先把图 ...

  6. 【转】Gvim配置(Windows and Linux)for C++|gvim编译运行c/c++程序

    转载地址:http://blog.csdn.net/onepiecehuiyu/article/details/8934366 http://mawenhao19930620.blog.163.com ...

  7. Windows Server 2008通过计划任务定时执行bat文件

    前段时间在Windows Server 2008安装了一套基于MySQL数据库的软件,处于数据安全的考虑,希望每天能够自动进行数据库备份.我在别人脚本的基础上自己写了一个数据库备份的bat脚本,双击该 ...

  8. dubbo的架构

    dubbo架构图如下所示: 节点角色说明: Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. Registry: 服务注册与发现的注册中心. Monitor: ...

  9. canvas画布标签

    最近良师益友整理一些canvas的资料,加强学习了解! 当你创建一个<canvas>元素后,就拥有了它的绘图上下文. 一.简单图形 1.getContext()方法 为了在canvas上绘 ...

  10. Fastify 系列教程四 (求对象、响应对象和插件)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) Fastify ...