目录

一、抽象类概述:

二、抽象方法 :

1.概述 :

2.应用 :

3.特点 :

三、抽象类特点 :

1.关于abstract关键字 :

2.抽象类不能被实例化,只能创建其子类对象 :

3.抽象类子类的两个选择 :

四、抽象类的成员 :

1.成员变量 :

2.成员方法 :

3.构造器 :

4.总结 :

5.代码演示 :

五、抽象类课堂练习 :

1.要求 :

2.思路 :

3.代码 :

六、总结 :


一、抽象类概述:

我们知道,类用来模拟现实事物。一个类可以模拟一类事物,而某个类的一个实例化对象可以模拟某个属于该类的具体的事物。类中描绘了该类所有对象共同的特性,当一个类中给出的信息足够全面时,我们就可以实例化该类;比方说,在Dog类中定义了name,age,fur_color,sex等属性,以及habit,eat等行为时,我们就可以创建一个Dog类对象,来模拟某个具体的Dog,比如你家的宠物狗,或者是神犬小七等。但是,当一个类中给出的信息不够全面时,(比方说有无法确定的行为),它给出的信息不足以描绘出一个具体的对象,这时我们往往不会实例化该类,这种类就是抽象类打个比方,对于Animal类,是,所有的动物都有吃喝的行为,定义eat方法可以描述动物“吃”这一行为,但是每种动物吃的都不一样,因此一个eat方法并不能准确描述吃什么,怎么吃。这时Animal给出的信息就不足够描述一个对象,我们就不能去实例化Animal类。
        在Java中,我们通过在类前添加关键字abstract(抽象的)来定义抽象类。如下图所示 :

public abstract class Animal {//Animal类此时就是一个抽象类。
}class Dog extends Animal {//Dog类继承了Animal类,是Animal类的子类。
}

二、抽象方法 :

1.概述 :

我们将“只有方法声明,没有方法体”的一类方法统称为抽象方法抽象方法用关键字abstract修饰。需要注意的是,如果一个方法已经确定是抽象类,那么它绝不能再有方法体,即不能出现大括号,而是只需要在()后面添加一个分号即可,否则IDEA会提示报错信息,如下图所示 :

还要注意一点,如果某个类中已经出现了抽象方法,那这个类必须定义成抽象类,否则会报错,如下GIF动图演示——我们删掉Animal类前的abstract修饰符,IDEA立马就会给出提示信息,如下 :

也就是说,拥有抽象方法的类一定是抽象类;但是抽象类不一定有抽象方法。

2.应用 :

当父类需要定义一个方法,却不能明确该方法的具体实现细节时,可以将该方法定义为abstract,具体实现细节延迟到子类。(让子类重写这个方法)
                就比如我们刚才说的——Animal类中的eat() 方法,我们可以先将其定义为抽象类,然后在子类中,比如说Dog类中重写eat() 方法,给出对Dog类对象“吃”这一行为的一些具体描述。
                up以Animal类,Dog类和Test类为例,代码如下 :

package knowledge.polymorphism.about_abstract.introduction;public abstract class Animal {   /** 父类 *///将Animal类中的eat() 方法定义为抽象类,具体实现延迟到子类。public abstract void eat();
}class Dog extends Animal {      /** 子类 *///子类重写父类的抽象方法,也称为子类实现了该抽象方法。public void eat() {System.out.println("狗是杂食性动物,喜食肉类,喂养时应该以动物蛋白为主,素食为辅。");}
}class Test {public static void main(String[] args) {Dog dog = new Dog();dog.eat();}
}

运行结果 : 

3.特点 :

若父类中定义了一个抽象方法要求其所有非抽象子类都必须重写该抽象方法。否则IDEA会报错,如下图所示 :

前面我们说了,抽象方法用abstract关键字修饰。这里再补充一点——抽象方法不能再使用private,final 或者static关键字来修饰,即abstract不能与private,final或static共同出现,这是因为定义抽象方法的目的就是想将方法的具体实现延迟到子类,最终是要被子类重写的,而private,final,static这几个关键字都和“方法重写”的目的背道而驰。
                如果你固执己见,非要让abstract和这几个关键字一同出现,IDEA也是毫不客气,直接报错,如下图所示 :

三、抽象类特点 :

1.关于abstract关键字 :

abstract关键字只能用于修饰类和方法,用于声明抽象类和抽象方法。其中,抽象类必须使用abstract关键字修饰声明时格式如下 : 

访问权限修饰符  abstract  class  类名{ // }

        访问权限修饰符  abstract  返回值类型  方法名(形参列表);

举个例子,如下 :

//抽象类
public abstract class Animal {//抽象方法public abstract void eat();        //抽象方法最后加一个分号即可,不可以有大括号。
}

2.抽象类不能被实例化,只能创建其子类对象 :

即,我们不能创建抽象类对象(这里的对象指的是堆空间中真正的对象,即不能“new 抽象类”),原因我们在开篇抽象类的概述中也提到了,这里不再赘述。如果你头铁,非要创建抽象类对象,IDEA也不是吃素的,直接报错,如下图所示 :

当然,如果抽象类的子类没有用abstract关键字修饰,那么我们可以创建其子类对象,如下图所示 :

3.抽象类子类的两个选择 :

如果某个类继承了一个抽象类,那么这个类有两个选择——要么实现父类所有的抽象方法,要么子类本身也定义成抽象类。当然,肯定也不会是瞎jb想定义成抽象类就定义成抽象类的

java 抽象类 详解相关推荐

  1. php面向对象代码_PHP面向对象之抽象类详解(代码实例)

    [摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...

  2. 接口与继承系列教材 (十)- Java 内部类详解

    接口与继承系列教材 (十)- Java 内部类详解 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤1:非静态内部类 步骤2:静态内部类 步骤3:匿名类 步骤4:本地类 步骤5:在匿名 ...

  3. Java集合排序及java集合类详解

    Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...

  4. Java接口 详解(二)

    上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用-工厂设计模式(Factory) 我们先看一个范例: package com. ...

  5. 常见的java设计模式详解

    常见的java设计模式详解 1. 根据目的来分 2 GoF的23种设计模式的功能 3.下面介绍几种常见的模式 单例(Singleton)模式 前言 1)单例(Singleton)模式的定义 2)特点 ...

  6. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  7. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  8. Java虚拟机详解----JVM常见问题总结

    [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...

  9. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

最新文章

  1. 如何向外行解释产品经理频繁更改需求为什么会令程序员烦恼?
  2. Electron初步【02】--第一个Electron App
  3. Spring Boot @SpringApplicationConfiguration 不能导入
  4. 网络不稳定的原因_关键词排名波动原因,如何解决网站排名不稳定!
  5. Python使用递归法和函数式编程计算整数各位之和
  6. 获取cookies的简单代码(总结待续)
  7. python property使用
  8. HVIDB!人类病毒蛋白互作数据库介绍
  9. c语言封皮,C语言程序设计封皮.doc
  10. 【避免进程死锁】银行家算法
  11. 分布式唯一ID几种生成方案
  12. 把你的阿里巴巴图标库转成你自己的@ant-design/icons
  13. 【postgresql】数据聚合之PERCENTILE_CONT
  14. KERNEL_DATA_INPAGE_ERROR 蓝屏开机卡顿修复
  15. 聚苯乙烯负载酸性离子液体(P[Vim-PS][HSO4])|活性炭(AC)负载酸性离子液体[Hmim-BS][HSO4]齐岳
  16. Python循环结构基础-continu/break
  17. 贾跃亭妻子甘薇被列入老赖名单;360两高管离职;中国联通正式关闭2G丨价值早报
  18. mac版idea下载(亲测有效)
  19. 计算机专业的浪漫情话,计算机专业表白情话 污到流水文章
  20. pytorch图像分类篇:6. ResNet网络结构详解与迁移学习简介

热门文章

  1. CXF部署到WebLogic的问题
  2. 2015校招季努力数月后拿到的offer
  3. 通过usb linux 显示器,惠普的新款 4K 显示器都能通过 USB Type-C 驱动
  4. Unity史上最全旋转详解(Rotate,rotation,localEulerAngles,localRotation,万向节锁)
  5. 日本半导体行业衰落的原因分析
  6. 一维差分(举例学习)
  7. linux busybox安装,busybox的编译、使用及安装
  8. 【调剂】河北大学2020年硕士研究生拟接收调剂专业公告
  9. 如何修改mysql表中列的大小?
  10. 为什么RHCE认证能久经不衰