Java面向对象——6.抽象类
抽象类
在Java面向对象编程中,抽象类(Abstract Class)是一种特殊的类,它不能被实例化,主要用于定义子类必须遵循的方法规范。
抽象类的概念
抽象类是用abstract关键字修饰的类,它可以包含两种方法:
- 抽象方法:用
abstract修饰,只有方法声明(定义),没有方法体(实现) - 具体方法:和普通类一样的完整方法实现
为什么需要抽象类?
考虑这样的场景:我们需要定义一个Shape(形状)类,它应该包含getArea()(计算面积)方法,但不同形状(圆形、矩形、三角形)的面积计算方式完全不同。此时:
- 无法在
Shape类中实现getArea()的通用逻辑 - 但必须保证所有形状都能计算面积(即必须有
getArea()方法)
抽象类恰好解决了这个矛盾:
abstract class Shape {
// 抽象方法:定义"必须计算面积"的规范
public abstract double getArea();
}
抽象类的定义格式
// 抽象类
abstract class 类名 {
// 抽象方法(无方法体)
public abstract 返回值类型 方法名(参数列表);
// 具体方法(有方法体)
public void 具体方法名() {
// 方法实现
}
}
抽象类的特性
不能实例化
抽象类本身不完整(包含未实现的抽象方法),因此无法创建对象:Shape s = new Shape(); // 编译错误:抽象类不能实例化
子类必须实现抽象方法
继承抽象类的子类必须覆写所有抽象方法,否则该子类也必须声明为抽象类:// 正确:实现抽象方法
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
// 必须实现getArea()方法
@Override
public double getArea() {
return Math.PI * radius * radius;
}
} // 错误:未实现抽象方法且未声明为抽象类
class Rectangle extends Shape {
private double width;
private double height;
// 缺少getArea()的实现,编译错误
}
可以包含具体方法
抽象类可以有完整实现的方法,供子类直接使用:abstract class Shape {
public abstract double getArea(); // 具体方法:所有形状都能打印面积
public void printArea() {
System.out.println("面积:" + getArea());
}
}
抽象类与普通类的区别
| 特性 | 抽象类 | 普通类 |
|---|---|---|
| 修饰符 | 必须用abstract |
不能用abstract |
| 实例化 | 不能实例化 | 可以实例化 |
| 抽象方法 | 可以包含 | 不能包含 |
| 继承要求 | 子类必须实现所有抽象方法 | 子类可选择性覆写方法 |
总结
- 抽象类不能实例化,只能作为父类被继承
- 子类必须实现所有抽象方法,否则需声明为抽象类
Java面向对象——6.抽象类的更多相关文章
- Java面向对象之抽象类,接口
抽象类: 含有抽象方法的类被声明为抽象类 抽象方法由子类去实现 含有抽象方法的类必须被声明为抽象类 抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法 抽象方法: 声明而未被实现的 ...
- Java面向对象之抽象类
内容: 1.抽象类的产生 2.抽象类和抽象方法的定义与使用 3.抽象类和抽象方法的注意事项 4.实例分析 1.抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具 ...
- Java面向对象_抽象类、接口
一.抽象类 概 念:很多具有相同特征和行为的对象可以抽象为一个类:很多具有相同特征和行为的类可以抽象为一个抽象类 关键字:abstract 规 则:1.抽象类可以没有抽象方法,有抽象方法的类必 ...
- Java 面向对象编程 抽象类 抽象方法 abstract
抽象类 通过abstract定义的方法是抽象方法,它只有定义,没有实现.抽象方法定义了子类必须实现的接口规范: 定义了抽象方法的class必须被定义为抽象类,从抽象类继承的子类必须实现抽象方法: 如果 ...
- java面向对象(下)-抽象类
抽象类和抽象方法 抽象类和抽象方法必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法 抽象类和抽象方法的规则如下 1.抽象类和抽象方法必须要用abstra ...
- Java面向对象13——抽象类
抽象类 package oop.demon01.demon08; //abstract 抽象类: 类 extends: 类---单继承 (接口可以多继承) public abstract c ...
- 浅谈Java面向对象之抽象类(abstract)
java语言,声明类时格式为: abstract class Db{} 说明Db类为抽象类.抽象方法是说没有方法的实现(方法体)此方法为抽象方法,只有抽象类和接口中才可以有抽象方法.简而言之,含有抽象 ...
- java面向对象_抽象类和接口
一.抽象类 1.抽象方法:由abstract修饰.只有定义没有方法体.用一个分号结尾. 2.抽象类: 1)包含抽象方法的类必须是抽象类 2)由abstract修饰 3)不能被实例化 4)抽象类如果不被 ...
- Java面向对象之抽象类abstract 入门实例
一.基础概念 抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物. 抽象类,是不断的向上抽取而来.抽取方法声明而不确定具体的方法内容.由不同的子类来完成具体的方法内容. (一)抽象 ...
- Java面向对象_抽象类应用——模板方法模式
概念:定义一个操作中的算法的骨架,而将一些可变部分的实现延迟到子类中.模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤. 去个例子分析一下这个概念: public cla ...
随机推荐
- C语言基础算法
C语言基础算法 目录 C语言基础算法 1.阶乘 递归实现 循环实现 2.排序 冒泡排序 选择排序 3.斐波那契数列 4.ASCII码的使用 1.阶乘 递归实现 #include <stdio.h ...
- python爬虫基本学习——函数
函数 概念:编写程序时,需要某块代码多次,为了提高编写效率和代码的重用,把具有独立功能的代码块组织为一个小模块,即函数. 代码练习 ''' #函数的定义 def printinfo(): print( ...
- Coze/Dify/FastGPT/N8N :该如何选择Agent平台?
你好,小钗在医疗AI.教育AI.管理AI有丰富的经验 关注公众号,回复1,与我交个朋友吧 书接上文: AI创业如何选择Agent平台,Coze.Dify.腾讯元器?可能都不是 Coze案例,个人知识库 ...
- 关于Design Review 的一些思考
开发流程 这篇文章记录一些我对Design Review 的一些思考,下面是我当下对开发流程的理解: 开发流程: 收到需求 需求分析 设计分析 项目排期 项目开发 测试环境测试 线上回归测试 上线观察 ...
- 大数据计算引擎 EasyMR:拥抱开源,引领技术创新
身处数字经济时代,随着大数据应用越来越广泛,越来越多的企业和组织开始关注大数据基础平台的建设和运营.在认识到其的重要性之后,如何具体着手搭建或采购大数据基础平台成为下一步需要解决的问题. 在大数据基础 ...
- Vue 结合Sortablejs实现table行排序
场景 在一个列表展示页面上,使用了表格组件,原有组件本身不支持拖拽功能,需求要求在列表的基础上支持行拖拽排序.因此引入了Sortablejs插件. 问题及解决方案 引入Sortablejs后刚开始都很 ...
- 让Smarty模板生成html文件
用Smarty模板生成html文件,其实就是在 display() 的同时,增加了 ob_start().b_get_contents() 和 fwrite() 函数. 具体实现方法,请看下面两个文件 ...
- C# 读取类Class注释
https://www.cnblogs.com/shanfeng1000/p/14972515.html 友好的注释能提高代码的可读性,几乎所有的编程语言都支持注释. 在C#中,注释不是可执行代码的一 ...
- 安卓端-APPUI自动化实战【下】
上一篇介绍了在solopi端的二次开发内容,接下来介绍下服务端的实现原理. 框架介绍: 使用比较成熟封装度较高的开源框架,尽量减少二次开发难度:Pear Admin Boot: 基 于 Spring ...
- Python库积累之you-get库:网页视频与资源下载
↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ you-get库是一个强大的视频网站下载工具,可以通过音视频网页的url链接直接下载包括视频,图片等媒体内容,从而解决一些网站视 ...