Java基础:第三十八讲 抽象类与抽象方法

《java工程师 基础 面经 自己总结 整合所有》 《java编程语言 面经 摘自java虚拟机 与面试84》面试题1、简单讲讲java跨平台原理面试题2、那你说说虚拟机的类加载机制第一小问:谈一谈类加载器的双亲委派模型第二小问:字节码执行引擎是如何执行字节码的第三小问:你说说java的内存模型面试题3、略读即可,简单问题第一小问:java中的int数据占几个字节第二小问:面向对象的特征有哪些?第三小问:有了基本数据类型,为什么还需要包装类型第... 阅读详情

本讲要说明的几个问题:什么是抽象类,抽象类的特点,抽象方法,抽象方法与抽象类的关系。

1、什么是抽象类

抽象类,实际上就是对类的进一步抽象。

从前面的介绍中,我们知道在面向对象的分析和设计中有很多次抽象,从现实世界中的对象抽象出软件系统中的对象(保留主要属性和行为,去掉次要属性和行为),从软件系统中的对象抽象出软件系统中的类(去掉属性值,把具体的对象变成了抽象的概念),现在我们要介绍的抽象类是对多个类的抽象结果,抽象类中描述了多个具体类的共同特征和行为,与我们之前说的父类是类似,不同之处在于抽象类不能有具体的对象,抽象类可以有不用实现的方法。

典型的例子就是交通工具,我们知道飞机、轮船、汽车、火车都是交通工具,都可以把乘客从一个地方带到另外一个地方,但是各种不同的交通工具的运行方式是不同的,汽车沿着公路走,火车沿着铁路线走,飞机需要先起飞、飞行、然后降落,有一定的航线。正式因为有这些共同特征,才抽象出交通工具这样的类。

我们可以说具体的飞机、轮船、汽车和火车对象,但是没有交通工具对象,这时候交通工具就是抽象的。

2、如何定义抽象类

使用abstract关键字定义抽象类,例如:

public abstract class A{

   ...

}

如果某个类是抽象类,则这个类不能有具体的对象。

如果某个类没有具体的对象,这个类还有什么用呢?通过这个类可以派生出子类,子类可以是抽象类也可以是非抽象类。所以有抽象类通常都是作为父类存在的。

3、抽象方法

在前面的介绍中,我们知道方法包括如下组成部分:方法的修饰符、方法的返回值类型、方法的名字、方法的参数列表、方法体。例如:

    public int getParentA(){
     return super.a;
    }

如果一个方法只给出方法的定义部分,而没有方法的具体实现,这个方法就是抽象方法。

例如:

    public int getParentA();

抽象方法的含义:某个对象具有这样的方法,但是方法如何实现不清楚。

例如上面的例子,各种交通工具都可以把乘客从一个地方带到另外一个地方,所以交通工具应该具有一个方法——移动,但是具体如何移动,不清楚,所以如果要在交通工具这个类中定义这个方法,只能是抽象的。意味着,交通工具应该有一个方法(移动),但是具体如何实现,需要看具体的子类。

另外一个典型的例子是几何图形,在软件系统中需要画各种图形,每种图形是具体的类,而图形作为抽象类。要在系统中显示各种图形,每种图形类都应该有画的方法,但是各种图形的画法不同,例如三角形需要给出3个点,而圆需要给出圆心和半径,直线需要给出两个点。所以在图形抽象类中中只能声明这个一个画的方法,具体实现留给子类。

4、如何定义抽象方法

抽象方法使用关键字abstract定义,例如画图的方法可以定义为:

    public abstract void print();

在类中,如果一个方法只给出声明,没有具体实现,应该使用abstract定义为抽象方法。

5、抽象方法与抽象类

如果一个类中出现了抽象方法,则这个类必须定义为抽象类。例如上面的图形类:

public abstract class Graphics{

    ...

    public abstract void print();

}

子类可以去实现具体的画法,例如三角形:

public class Triangle extends Graphics{

   private Point[] p; // 描述三角形的三个点

   public abstract void print(){

      ... // 根据3个点画图

   }

}

请记住:有抽象方法的类一定是抽象类。

抽象类一定要有抽象方法吗?不一定,抽象类可以没有抽象方法。

抽象类一定不能有实例,下面的代码是错误的:

Graphics g = new Graphics();

6、抽象类的作用

抽象类用于派生新的子类,子类在继承抽象类的时候,必须实现所有抽象方法,除非子类还是抽象类。

抽象类的子类允许是抽象类。

下次介绍面向对象的一大特性——多态性。

李绪成 优快云 Blog: http://blog.youkuaiyun.com/javaeeteacher

 

大一课程设计---几何图形 3. 几何图形(满分50分) 版本1:满分 10 分 设计抽象类 GeometricObject 及其子类 Triangle 和Circle。 GeometricObject 类设计要求如下: ■ 一个名为 color 的Color类型的私有数据域,表示对象的颜色 ■ 一个名为 filled 的Boolean类型的私有数据域,表示对象是否 ■ 一个名为 dateCreated 的Date 类型的私有数据域,表示对象的 ■ 一个无参构造方法。 ■ 一个能创建特定 color 和filled 的有参构造方法。 ■ 相关数据域的访问器和修改器。 ■ 两个个名为 draw 和erase的抽象方法。 ■ 一个名为 getArea的抽象方法。 ■ 一个名为 getPerimeter的抽象方法。 ■ 重写 toString 方法。 Triangle 类设计要求如下: ■ 三个名为 side1、side2和 side3 的double 类型的私有数据域表 们的默认值是 1.0。要求三个数据域保留 2 位小数。 ■ 一个无参的构造方法创建默认三角形。 ■ 一个能创建带指定 side1、side2和 side3 的有参构造方法。 ■ 所有三个数据域的访问器和修改器方法。 ■ 父类抽象方法的实现。 ■ 重写 toString 方法。 Circle 类设计要求如下: ■ 一个名为 radius 的double 类型的私有数据域,表示圆的半径,数据域保留2 位小数。 ■ 一个名为 PI 的静态常量,其值为 3.14 ■ 一个无参的构造方法创建默认三角形。 ■ 一个能创建带指定 radius 的有参构造方法。 ■ radius 数据域的访问器和修改器方法。 ■ 父类抽象方法的实现。 ■ 重写 toString 方法。 测试类 TestGeometricObject1 设计要求如下: ■ 一个能随机生成 Circle 类和Triangle 类对象的静态方法 GeometricObject[] RandomCreateGeometricObject() ■ 以随机生成的数组为参数,输出数组中每个对象的基本信息、周长和面积。 ■ 类中其它方法的测试 版本2:满分 20 分 将上面的抽象类GeometricObject 改为接口,接口只保留其中四个抽象方法,声明类 Circle、Triangle 实现该接口,类的基本要求如上,同时为每个类增加一个将当前对象序列化 到指定文件的方法 writeToFile(File f)。 测试类 TestGeometricObject2 设计要求如下: ■ 一个能随机生成 Circle 类和Triangle 类对象的静态方法,该方法将随机生成的象序列 化到指定的文件 GeometricObjects.dat 中,序列化成功返回真,否则返回假。 Boolean RandomCreateGeometricObject() ■ 将GeometricObjects.dat 文件中对象全部读出,存储到 GeometricObject 对象数组中, 然后以此数组为参数,输出数组中每个对象的基本信息、周长和面积。 ■ 类中其它方法的测试。 新增一个类Rectangle ,也实现接口 GeometricObject ,同时修改测试类 TestGeometricObject2 ,体会开-闭原则。 版本3:满分 20 分 在第2 步的基础上设计实现一个具有 GUI 界面的几何图形绘制系统系统,要求实现根 据选择的几何图形类型来绘制和删除相应的图形,其中相关参数应通过界面输入,并可计算 图形的周长和面积。 立即下载

相关推荐

设计一个扩展自抽象类GeometricObject 的新的Triangle 类

(三角形类)设计一个扩展自抽象类GeometricObject 的新的Triangle 类。绘制Triangle 类和GeometricObject 类的UML图并实现Triangle 类。 编写一个测试程序,提示用户输入三角形的三条边、一种颜色以及一个表明该三角形是否填充的布尔值。程序应该根据用户的输入,使用这些边以及颜色和是否填充的信息,创建一个Triangle 对象。程序应该显示面积、周长、颜色以及真或者假来表明是否被填充。

java基础知识总结

------- android培训、java培训、期待与您交流! ----------  Java基础知识精华部分(个人总结) 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。 4,代码实现。用具体的java语言代码把思路体现出来。   学习新技术的四点: 1,该技术是什么? 2,该技术有

th676759829的专栏 2502

java几何图形

完整的程序,可直接运行。分别包括圆、三角形、矩形。可以随意绘制图形大小,并且求出你所需要的周长和面积。界面简洁美观,欢迎大家下载

[基础题] 3、设计一个交通工具抽象类,提供抽象方法--驾驶

/*3、设计一个vehicle交通工具抽象类,提供抽象方法--驾驶drive   Car汽车作为交通工具的一种,实现了驾驶的方法(在马路上驾驶)   Train火车作为交通工具的一种,实现了驾驶的方法(在铁路上驾驶)   Airplane飞机作为交通工具的一种,实现了驾驶的方法(在天上驾驶)   需求:做一个测试类,在测试类的main函数中,分别实例化一个汽车的对象,火车的对象和飞机的对象

6791

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6012

FPGA之串口收发字符串之(四)——串口屏USART_HMI介绍

之前对串口各模块的设计都做了相关介绍。这里介绍串口屏的相关知识。 本次项目使用的串口屏型号是陶晶驰串口屏TJC3224T024_011,这个型号的串口屏的资料在官网可以找到。本文抛转引玉,简单介绍以便在本工程中更好的应用。 下图是该串口屏的实物图: 一般地,使用单片机或者嵌入式MCU控制串口屏,都会用到串口,同样地,在FPGA中实现也是类似,不过稍微复杂,具体代码设计过程中有以下问题需要...

隔壁old余的博客 7496

Java汽车和飞机定义为抽象类,Java基础:第三十八讲 抽象类与抽象方法

本讲要说明的几个问题:什么是抽象类,抽象类的特点,抽象方法,抽象方法与抽象类的关系。1、什么是抽象类抽象类,实际上就是对类的进一步抽象。从前面的介绍中,我们知道在面向对象的分析和设计中有很多次抽象,从现实世界中的对象抽象出软件系统中的对象(保留主要属性和行为,去掉次要属性和行为),从软件系统中的对象抽象出软件系统中的类(去掉属性值,把具体的对象变成了抽象的概念),现在我们要介绍的抽象类是对多个类的...

weixin_34584910的博客 854

win11本地部署openclaw实操第1集

OpenClaw 是一款开源、本地优先、可自托管的 AI 智能体(AI Agent)网关 / 自动化框架,核心是让 AI 从 “只聊天、给建议” 变成 “能在你电脑上真做事” 的数字助手。

weixin_44626085的博客 7129

Java基础:第三十七讲 成员方法的继承与覆盖

李绪成的一亩三分地 1866

CLion for Mac(m1)配置GCC编译器

条件:电脑已经下载过XCode 一. 下载HomeBrew homebrew是一款macos,linux下的包管理工具,我们需要使用他来下载GCC 下载方法: 1.打开终端(terminal) 2.输入 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ps.有可能会遇到的问题 我当初下载挂了VPN,优快云上还有很多解决问题的方法,可以将错误信

supermario19的博客 7847

【软件介绍】RVC本地部署使用方法

【摘要】RVC是一款功能强大的开源语音转换工具,具有实时处理、多音效选择、高质量音频处理等特点。文章详细介绍了RVC的安装与使用方法:1)配置Python环境;2)根据电脑系统选择对应安装包解压;3)启动程序进入浏览器操作界面。重点讲解了声音克隆的关键步骤:建议使用短音频素材,选择合适训练方法(推荐pm或rmvpe),设置100次训练轮数,生成的模型文件存入weights文件夹。最后通过上传音频即可实现声音克隆。操作过程需注意保持程序运行状态,并提供了相关资源下载地址。

心动的那一刻,记忆便盛开了花 2986

“全栈2019”113篇Java基础学习资料及总结

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 “全栈2019”Java第一章:安装JDK11(Mac) “全栈2019”Java第二章:安装JDK11(Windows) “全栈2019”Java第三章:安装开发工具IntelliJ IDEA “全栈2019”Java第四章:创建第一个Ja...

人人都是程序员官方博客 902

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决

(Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。

m0_56451176的博客 857

大本营半年总结(115篇文章)

去年9月21日加入学生大本营,今天3月21日,刚好半年。 快啊! 有太多想说的话,......,下面是这些本年来文章的目录。   1、Java基础系列   Java基础:第四十一讲 this和super Java基础:第四十讲 向上转型和强制类型转换 Java基础:第三十九讲 多态 Java基础:第三十八讲 抽象类与抽象方法 Java基础:第三十七讲 成员方法的继承与覆盖 J...

李绪成的一亩三分地 2625

【Bug已解决】Codex capacity errors 自动重试与意图保留 解决方案

原始报错:Codex Desktop: capacity errors should preserve intent and auto-retry instead of handing model routing back to the user场景:向模型服务发请求时遇到容量错误(服务端繁忙 / 限流 / 容量不足),客户端不做任何重试,直接把"请求失败,请选择另一个模型或重试"的锅甩给用户,让用户手动去点。用户本来只是想完成一次任务,却被中途打断去当"调度员"。

博客 279

12、信号采样与Z变换的全面解析

本文全面解析了信号采样和Z变换的核心概念与应用。内容涵盖采样基础、采样频率与奈奎斯特率的关系、离散时间处理模拟信号的方法、采样率转换技术,以及Z变换的定义、性质、常见变换对和逆变换计算。通过实例分析和流程图展示,帮助读者深入理解数字信号处理的关键步骤,为相关领域的学习与应用打下坚实基础。

Jerry的专栏 120

1. 设计图形(Shape)类及其子类(Circle、Rectangle、Triangle) 1) Shape属性:Point p 代表图形中心位置,color颜色 2) Circle

Point:public class Point { private int x; private int y; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = ...

健健 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

GeometricObject

public class GeometricObject{     private String color = "white";     private boolean filled;     private java.util.Date dateCreated;         /** Construct a default geometric object */     pub

u014757261的专栏 1390

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

几何图元的表达

顶点定义 当我们用顶点去定义几何图元时,我们可能用两个顶点去表达一条线,或者三个顶点去表达一个三角形。那么D3D是如何去理解我们给定的N个点的信息呢? Primitive Topology 一个顶点的集合被称为vertex buffer,他仅仅储存了一个顶点列表在一个连续的内存空间中。当我们需要D3D去组合这个几何图元时,我们需要告诉他顶点的几何拓扑信息。利用void ID3D12Graphi

zjjzhaohang的博客 1885

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java三角形类triangle设计一个名为triangle的类来扩展geometricobject类

设计一个名为triangle的类来扩展geometricobject类,该类包括 三个名为side1,side2,side3的double数据域表示这个三角形的三条边,它们的默认值是1.0 一个无参构造方法创建默认三角形 一个能创建带指定size的三角形构造方法 所有三个数据域的访问器 – java语言程序设计11.1 import java.util.*; public cl...

j_linlian的博客 1万+

(Triangle类)设计一个名为Triangle的类来继承GeometricObject类。

(Triangle类)设计一个名为Triangle的类来继承GeometricObject类。该类包括: 三个名为side1,side2,side3的double类型数据域来表示这个三角形的三条边,它们的默认值是1.0。 一个无参构造方法,创建一个默认的三角形。 一个创建指定side1,side2,side3值的三角形的构造方法。 所有三个数据域的访问器方法。 一个名为getArea()...

乐以风的博客 1万+

JAVA--封装三角型 梯形 圆形三个类,用一个程序执行入口对三类对象进行测试

public class diliuzhou_1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } } class Trangle { double sideA,sideB,sid

小小的天有大大的梦想 3766

通过一个程序来理解PHP里面的抽象类【2】

代码 1 <?php 2 3 header("Content-Type: text/html; charset=utf-8"); 4 5 $c = new Cat("catName", "blue"); 6 7 $d = new Dog("dogName", "yellow"); 8 9 $b = new Bird("bir...

weixin_34235135的博客 136
上一篇: Java基础:第三十七讲 成员方法的继承与覆盖
下一篇: Java基础:第三十九讲 多态
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值