java 抽象类 详解
目录
一、抽象类概述:
二、抽象方法 :
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 抽象类 详解相关推荐
- php面向对象代码_PHP面向对象之抽象类详解(代码实例)
[摘要] PHP即"超文本预处理器",是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 ...
- 接口与继承系列教材 (十)- Java 内部类详解
接口与继承系列教材 (十)- Java 内部类详解 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤1:非静态内部类 步骤2:静态内部类 步骤3:匿名类 步骤4:本地类 步骤5:在匿名 ...
- Java集合排序及java集合类详解
Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用-工厂设计模式(Factory) 我们先看一个范例: package com. ...
- 常见的java设计模式详解
常见的java设计模式详解 1. 根据目的来分 2 GoF的23种设计模式的功能 3.下面介绍几种常见的模式 单例(Singleton)模式 前言 1)单例(Singleton)模式的定义 2)特点 ...
- Apache Thrift - java开发详解
2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...
- Java泛型详解-史上讲解最详细的,没有之一
目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...
- Java虚拟机详解----JVM常见问题总结
[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...
- java 泛型详解、Java中的泛型方法、 java泛型详解
本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...
最新文章
- 如何向外行解释产品经理频繁更改需求为什么会令程序员烦恼?
- Electron初步【02】--第一个Electron App
- Spring Boot @SpringApplicationConfiguration 不能导入
- 网络不稳定的原因_关键词排名波动原因,如何解决网站排名不稳定!
- Python使用递归法和函数式编程计算整数各位之和
- 获取cookies的简单代码(总结待续)
- python property使用
- HVIDB!人类病毒蛋白互作数据库介绍
- c语言封皮,C语言程序设计封皮.doc
- 【避免进程死锁】银行家算法
- 分布式唯一ID几种生成方案
- 把你的阿里巴巴图标库转成你自己的@ant-design/icons
- 【postgresql】数据聚合之PERCENTILE_CONT
- KERNEL_DATA_INPAGE_ERROR 蓝屏开机卡顿修复
- 聚苯乙烯负载酸性离子液体(P[Vim-PS][HSO4])|活性炭(AC)负载酸性离子液体[Hmim-BS][HSO4]齐岳
- Python循环结构基础-continu/break
- 贾跃亭妻子甘薇被列入老赖名单;360两高管离职;中国联通正式关闭2G丨价值早报
- mac版idea下载(亲测有效)
- 计算机专业的浪漫情话,计算机专业表白情话 污到流水文章
- pytorch图像分类篇:6. ResNet网络结构详解与迁移学习简介