java多态练习_Java课堂练习——多态

2023-11-02

一.ATM机

import java.util.Scanner;

abstract class drawmoney{

public abstract double getMoney(double a,double n);

}

class drawmoney100 extends drawmoney{

public double getMoney(double a,double n){

if(a<100){

System.out.println("余额不足,请选择其他业务");

return a;

}

else {

System.out.println("已吐出100元");

return a-=100;

}

}

}

class drawmoney500 extends drawmoney{

public double getMoney(double a,double n){

if(a<500){

System.out.println("余额不足,请选择其他业务");

return a;

}

else {

System.out.println("已吐出500元");

return a-=500;

}

}

}

class drawmoney1000 extends drawmoney{

public double getMoney(double a,double n){

if(a<1000){

System.out.println("余额不足,请选择其他业务");

return a;

}

else {

System.out.println("已吐出1000元");

return a-=1000;

}

}

}

class drawmoney1500 extends drawmoney{

public double getMoney(double a,double n){

if(a<1500){

System.out.println("余额不足,请选择其他业务");

return a;

}

else {

System.out.println("已吐出1000元");

return a-=1000;

}

}

}

class drawmoney2000 extends drawmoney{

public double getMoney(double a,double n){

if(a<2000){

System.out.println("余额不足,请选择其他业务");

return a;

}

else {

System.out.println("已吐2000元");

return a-=2000;

}

}

}

class drawmoney5000 extends drawmoney{

public double getMoney(double a,double n){

if(a<5000){

System.out.println("余额不足,请选择其他业务");

return a;

}

else {

System.out.println("已吐出5000元");

return a-=5000;

}

}

}

class drawmoneyn extends drawmoney{

public double getMoney(double a,double n){

if(a

System.out.println("余额不足,请选择其他业务");

return a;

}

else {

System.out.println("已吐出"+n+"元");

return a-=n;

}

}

}

class Account{

String account;

String usename;

int password;

String date;

double balance;

int Operation;

public Account(){

account="accout1805231593";

usename="宋家林";

password=521114;

date="1997.8.11";

balance=230.15;

Operation=0;

}

public Account(String a,String b,int c,String d,double e,int f){

account=a;

usename=b;

password=c;

date=d;

balance=e;

Operation=f;

}

}

public class ATM {

public Account h=new Account();

}

public boolean shurumina(int a){

if(a==h.password) {

System.out.println("密码正确");

}

else{

System.out.println("密码错误,请重新输入");

return false;

}

public void jiemian(boolean a){

Scanner cin=new Scanner(System.in);

while(a){

System.out.println("1.存款");

System.out.println("2.取款");

System.out.println("3.转账汇款");

System.out.println("4.修改密码");

System.out.println("5.查询余额");

System.out.println("6.退卡");

int b=cin.nextInt();

switch (b){

case 1:deposit(b);break;

case 2:withdrawals(b);break;

case 3:transfer(b);break;

case 4:Passwordservice(b);break;

case 5:System.out.println(h.balance);break;

case 6:a=false;break;

}

}

}

public int withdrawals(int a){

Scanner cin=new Scanner(System.in);

System.out.println("1.100元");

System.out.println("2.500元");

System.out.println("3.1000元");

System.out.println("4.1500元");

System.out.println("5.2000元");

System.out.println("6.5000元");

System.out.println("7.其他金额");

System.out.println("8.返回");

int b=cin.nextInt();

double c=0;

drawmoney m=null;

switch (b){

case 1:m= new drawmoney100();m.getMoney(h.balance, b);break;

case 2:m= new drawmoney500();m.getMoney(h.balance, b);break;

case 3:m= new drawmoney1000();m.getMoney(h.balance, b);break;

case 4:m= new drawmoney1500();m.getMoney(h.balance, b);break;

case 5:m= new drawmoney2000();m.getMoney(h.balance, b);break;

case 6:m= new drawmoney5000();m.getMoney(h.balance, b);break;

case 7:{

System.out.println("输入金额");

c=cin.nextDouble();

m= new drawmoneyn();

m.getMoney(h.balance, c);break;

}

case 8: return a;}

return a;

}

public int deposit(int a){

System.out.println("放入人民币");

System.out.println("输入金额");

Scanner cin=new Scanner(System.in);

int b=cin.nextInt();

h.balance+=b;

System.out.println("已成功");

jiemian(true);

return a;

}

public int transfer(int a){

System.out.println("请输入银行账号");

Scanner cin=new Scanner(System.in);

String b=cin.next();

System.out.println("输入转账的金额");

int c=cin.nextInt();

h.balance-=c;

System.out.println("已成功");

jiemian(true);

return 0;

}

public int Passwordservice(int a){

System.out.println("请输入新密码");

Scanner cin=new Scanner(System.in);

int b=cin.nextInt();

h.password-=b;

System.out.println("已成功");

return 0;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

ATM mm=new ATM();

String out=new String();

out+="请插入银行卡";

System.out.println(out);

System.out.println("已成功");

out+="请输入密码";

System.out.println(out);

Scanner cin=new Scanner(System.in);

int a=cin.nextInt();

while (!mm.shurumina(a)){

a=cin.nextInt();

}

mm.jiemian(true);

}

}

二.

1.左边的程序运行结果是什么?

2. 计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性?

当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。

这个特性实际上就是面向对象“多态”特性的具体表现。

如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。

如果子类被当作父类使用,则通过子类访问的字段是父类的!

牢记:在实际开发中,要避免在子类中定义与父类同名 的字段。不要自找麻烦!——但考试除外,考试 中出这种题还是可以的。

三.

可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:

Object obj="Hello";if(obj instanceof String)

System.out.println("obj对象可以被转换为字符串");

程序代码:public class TestInstanceof {

public static void main(String[] args)

{

//声明hello时使用Object类,则hello的编译类型是Object,Object是所有类的父类

//但hello变量的实际类型是String

Object hello = "Hello";

//String是Object类的子类,所以返回true。

System.out.println("字符串是否是Object类的实例:" + (helloinstanceof Object));

//返回true。

System.out.println("字符串是否是String类的实例:" + (helloinstanceof String));

//返回false。

System.out.println("字符串是否是Math类的实例:" + (helloinstanceof Math));

//String实现了Comparable接口,所以返回true。

System.out.println("字符串是否是Comparable接口的实例:" + (helloinstanceof Comparable));

String a = "Hello";

//String类既不是Math类,也不是Math类的父类,所以下面代码编译无法通过

//System.out.println("字符串是否是Math类的实例:" + (ainstanceof Math));

}

}

四.为什么要用多态?它有什么好处?

使用多态最大的好处是:当你要修改程序并扩充系统时,你需要修改的地方较少,对其它部分代码的影响较小!千万不要小看这两个“较”字!程序规模越大,其优势就越突出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java多态练习_Java课堂练习——多态 的相关文章

  • 稳压二极管的串联与并联

    稳压二极管又叫齐纳二极管 是一种用于稳定电压的二极管 注 其承受电流非常小 需要根据场合使用 常见类型 其组合方式有串联与并联 串联 串联有以上四种方式 图1 10V和8V稳压管均击穿 VCC为两者稳压值的和 VCC 10 8 18V 图2
  • 整理java集合

    1 map 实现类 HashMap 无序 键值可为null 非同步 Hashtable 无序 键值非null 作键的对象必须实现 hashCode 方法和 equals 同步 性能低 LinkedHashMap 有序记录插入顺序 如果在映射
  • 【超详细Python秒杀代码】京东淘宝抢购通用

    由于之前手动抢购枪神7超竞连续失败两次后怒学脚本抢购 今天给大家分享一期超简单 直观 好用的Python脚本 此代码目前仅适用于可以加入购物车的商品 直接上代码 import datetime import time from seleni
  • 为什么机油使用后变红_汽车机油用完后放出油红色怎么回事

    展开全部 汽车e68a84e8a2ad62616964757a686964616f31333433623861机油用完后放出油红色的原因为 因为汽车添加的机油油品出现问题了 劣质机油往往都没有很好的润滑冷却作用 不仅无法清除发动机内部的积碳
  • MarkerView

    前言 过了一个愉快的五一后 我们又开始上班了 完成了本分的工作 抽点时间来和说说MarkerView咯 给我的印象 MarkerView的扩展性很强 它可以自定义自己想要的U样式 MarkerView源码 View that can be
  • 【Spring】一篇文章快速搞懂BeanFactory和FactoryBean的区别

    目录 一 BeanFactory 1 1 源码 1 2 使用场景 二 FactoryBean 2 1 源码 2 2 示例 2 2 1 方法一 2 2 2 方法二 2 3 FactoryBean的两种用法 2 3 1 简化xml配置 隐藏细节
  • C语言结构体所占用的字节数如何计算

    结bai构体的数据类型的有点多我们就不啰嗦了 直du接来看相同数据结构体的几种书zhi写的格式吧 格式一 struct tagPhone char A int B short C Phone 格式二 struct tagPhone char
  • 前端模块化,基础组件和业务组件的区分

    前言 最近做的项目整个感觉就很混乱 经常性的c v 个人认为写代码就必须拥有很强的复用性 最近思考了许久 当前我们做的项目最缺少的就是模块化 及业务和基础的区分 模块化是一种思想 是将大工程拆成小的模块分治的思想 日常理解的模块化个人认为好
  • 【运维工程师学习四】Web服务之Linux配置安装Apache

    运维工程师学习四 Web服务之Apache 1 查询 安装apache rpm命令使用 2 验证httpd是否启动成功 1 查看是否有httpd的进程 2 查看是否有80端口在监听中 3 CentOS7默认不带netstat命令 通过yum
  • 浅谈 vue路由跳转的四种方式

    ps 区别 this router push 跳转到指定url路径 并想history栈中添加一个记录 点击后退会返回到上一个页面 this router replace 跳转到指定url路径 但是history栈中不会有记录 点击返回会跳
  • 使用 Python 将若干个 PDF 文件合并到一个中

    from pathlib import Path from PyPDF2 import PdfFileMerger read path r C Users liujieru Documents 需要合并的 pdf所在文件夹 write pa
  • Pinia

    store 是一个用reactive 包裹的对象 这意味着不需要在getter 之后写 value 但是 就像setup 中的props 一样 我们不能对其进行解构 大多数时候 getter 只会依赖状态 但是 他们可能需要使用其他 get
  • 使用webstorm操作git

    前言 对于git的使用 大家的使用方式均有不同 最王道的方式非命令行莫属 基于git的GUI软件还是很多的 大家可自行研究使用 之前使用eclipse svn插件去操作版本管理 还是很便捷的一件事情 而今用惯了webstorm 当然里面也集
  • 其中的文件夹或文件已在另一个程序中打开怎么解决

    不小心下载流氓软件 卸载时候总出现文件夹或文件正在被占用 出现这种方法 我在网上查都是这种解决方法 如下 方法一 win R 快捷键打开运行窗口 并输入taskmgr 打开任务管理器 点击 性能 点击 打开资源监视器 点击 CPU 然后在关
  • vite.config.js-element-plus

    打包工具 webpack 一 根据element plus官网给的方法配置自动导入 1 首先你需要安装unplugin vue components 和 unplugin auto import这两款插件 npm install D unp
  • 应用场景是什么?怎样判断、描述一个产品的应用场景?

    注 论文发表于 包装工程 杂志2017年第6期 工业设计 栏目 虽然是17年才发表 但这篇论文其实是很早之前写的 所以用的案例比较老 作者 胡伟峰 王玉梅 汤进 李世国 江南大学 无锡 214122 摘 要 目的 研究产品交互设计中场景理论
  • Springboot 集成logback 日志框架简介

    Spring Boot 作为微服务应用 默认集成 logback 日志框架 logback 是log4j框架的作者开发的新一代日志框架 它效率更高 能够适应诸多的运行环境 同时天然支持SLF4J 笔者刚好接触SpringBoot不久 之前用
  • AndroidStudio解决Gradle文件占用的问题

    在使用AndroidStudio开发时 经常在修改代码之后编译出现文件占用的问题 具体的提示一般是 xxx jar classes jar等出现文件占用 无法编译 传统的办法一般是 重启AndroidStudio 或者通过任务管理器搜索占用
  • QT DAY2

    华清远见上海中心22071班

随机推荐

  • NV21、NV12、YV12、RGB565、YUV等颜色编码格式区别和接口设计探讨

    NV21 NV12 YV12 RGB565 YUV扫盲 NV21 NV12 YV12 RGB565 YUV分别是不同的颜色编码格式 这些颜色编码格式各有特点 适用于不同的应用场景 选择合适的颜色编码格式取决于具体的需求和环境 NV21 NV
  • FastDFS安装步骤以及SpringBoot集成fastdfs-client-java

    一 环境准备 1 前期准备 名称 说明 centos 7 x libfastcommon FastDFS分离出的一些公用函数包 FastDFS FastDFS本体 fastdfs nginx module FastDFS和nginx的关联模
  • Ubuntu18.04下安装配置SSH服务

    安装ssh工具 1 打开终端键入如下命令 apt get update apt get install openssh server 2 选择Y继续执行 启动SSH服务 1 键入如下命令 etc init d ssh start 注 重启命
  • 机器学习面试题汇总(1~50题)

    机器学习面试题汇总 1 50题 1 深度神经网络预防过拟合的方法 2 SMOTE算法 过采样算法 3 为什么LR 逻辑回归 用sigmoid函数 4 LR损失函数 5 几种神经网络梯度下降方法 6 克莱姆法则 7 各种排序的时间复杂度 8
  • 【JDK】:Java容器框架——同步容器与并发容器

    前面的文章中详细介绍了Java的容器框架 在此基础上 本文对Java中的同步容器与并发容器做一些介绍 fail fast机制 快速报错机制 fail fast 能够防止多个进程同时修改同一个容器的内容 如果在你迭代遍历某个容器的过程中 另一
  • 云服务器维护工作,服务器日常维护工作

    服务器日常维护工作 内容精选 换一换 以昇腾 AI 处理器的PCIe的工作模式进行区分 如果PCIe工作在主模式 可以扩展外设 则称为RC模式 如果PCIe工作在从模式 则称为EP模式 昇腾 AI 处理器的工作模式如下 昇腾310 AI处理
  • Vuex学习总结

    Vuex学习总结 1 概述 说说我的理解 不一定对 由于前端的组件化开发常常难免涉及到组件之间的通信 对于一个小型项目来说 通过父子组件通信就够用了 但是 可能随着项目扩大 存在兄弟组件或者祖孙组件通信的通信 其解决方法通常有两种 中央bu
  • QML VideoOutput填充模式引发的问题

    QML Camera显示不全问题 BUG记录 QML使用Camera组件获取摄像头中的视频 使用VideoOutput显示 显示没有问题 但在Capture时 生成的图片明显比显示的东西多 真实生成的图片 在VideoOutput显示的部分
  • JMJS系统总结系列----JMJS中接口使用的技术(六)

    三同时接口 调用外部的webService A 添加WebService引用 using JMJS BusinessLogic IsSupervisionsServiceReference B 具体调用 public class IsSup
  • MySQL表操作:提高数据处理效率的秘诀(进阶)(1)

    生命不在于相信奇迹 而在于创造奇迹 朱学恒 作者 不能再留遗憾了 专栏 MySQL学习 本文章主要内容 MySQL对表操作进阶 数据库约束 表的设计 新增 后续会更新进阶表的查询 文章目录 前言 1 数据库约束 NULL约束 UNIQUE
  • VTK 测量类Widget的应用 与 vtkDistanceWidget 3D测试 问题

    vtkDistanceWidget 用于在二维平面上测量两点之间的距离 vtkAngleWidget 用于在平面的角度测量 AngleWidget 感觉这都是 2D控件 include
  • nvm use 无法切换npm的解决办法

    nvm正常的安装目录结构 没有正常切换时对应的文件结构 3 解决方法 nvm use 无效 即 nvm use 后执行nvm ls 当前使用的版本前正常是会有 标注 可是nvm use 所有版本前都没有 我当前使用的版本是 6 10 0 我
  • 编写一个类实现银行账户Account的概念

    编写一个类实现银行账户Account的概念 包含的属性有 帐号 密码 存款余额 利率rate 最小余额 定义封装这些属性的方法 账号要自动生成 编写主类 使用银行账户类 输入 输出3个储户的上述信息 考虑 哪些属性可以设计成static属性
  • 【APP自动化测试必知必会】Appium之微信小程序自动化测试

    本节大纲 H5 与小程序介绍 混合 App 元素定位环境部署 混合 App 元素操作 Airtest 测试 App 01 H5与小程序介绍 H5概述 H5 是指第 5 代 HTML 也指用 H5 语言制作的一切数字产品 所谓 HTML 是
  • springboot2整合redis超简单

    依赖
  • [开发

    同时支持中国手机和固定电话号码的正则表达式 const pattern 1 3 9 d 9 0 d 2 3 d 7 8 d 1 5 说明 表示字符串的开始 1 3 9 d 9 0 d 2 3 d 7 8 d 1 5 使用逻辑或 将两个正则表
  • 分布式任务调度框架xxljob2.2.0详细安装使用教程

    分布式任务调度框架xxljob2 2 0详细安装使用教程 简介 概述 特性 总体设计 源码目录介绍 调度数据库 配置 架构设计 设计思想 系统组成 架构图 安装 环境 创建目录 下载 解压 初始化调度数据库 调度数据库表说明 配置部署 调度
  • 安装Visio2010 64bit时提示不能安装32位版本的Office 2010 ,因为您当前已经安装了64位Office产品的解决方法(亲测可行)

    电脑是64位的 从网上找了64位的Visio2010但是安装的时候却提示不能安装32位版本的Office 2010 因为您当前已经安装了64位Office产品 如下 然后就找到了一个解决办法 链接 https pan baidu com s
  • 网页防篡改把服务器顶满,网页防篡改技术

    网页防篡改技术 网页防篡改技术包括时间轮询技术 核心内嵌技术 事件触发技术 文件过滤驱动技术等 时间轮询技术利用网页检测程序 以轮询方式读出要监控的网页 与真实网页相比较 来判断网页内容的完整性 对于被篡改的网页进行报警和恢复 但是由于目前
  • java多态练习_Java课堂练习——多态

    一 ATM机 import java util Scanner abstract class drawmoney public abstract double getMoney double a double n class drawmon