继承性与super的使用练习
练习1:
Account:
package com.aff.sup;
public class Account {
private int id;// 账号
private double balance;// 余额
private double annualInterestRate;// 年利率
public Account(int id, double balance, double annualInterestRate) {
super();
this.id = id;
this.balance = balance;
this.annualInterestRate = annualInterestRate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public double getMonthlyInterest() {
return this.annualInterestRate / 12;
}
// 取钱
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
System.out.println("成功取出" + amount);
} else {
System.out.println("余额不足");
}
}
// 存钱
public void deposit(double amount) {
balance += amount;
System.out.println("成功存入" + amount);
}
}
TestAccount:
package com.aff.sup; //写一个用户测试Account类, 在用户程序中创建一个账号为1122,余额20000,年利率4.5%的Account对象
//使用withdraw方法提款30000,并打印个余额
//再使用withdraw 方法提款2500 使用deposit方法存款3000,然后打印余额和月利率
public class TestAccount {
public static void main(String[] args) {
Account acct = new Account(1122, 20000, 0.045);
acct.withdraw(30000);
System.out.println("当前余额:" + acct.getBalance()); acct.withdraw(2500);
acct.deposit(3000);
System.out.println("当前余额:" + acct.getBalance() + "月利率:" + acct.getMonthlyInterest());
}
} 输出结果:
余额不足
当前余额:20000.0
成功取出2500.0
成功存入3000.0
当前余额:20500.0月利率:0.00375
练习2:创建Acount类的一个子类CheckAccount代表可透支账户,该账户中定义一个属性overdraft代表可透支余额,
在CheckAccount类中重写withdraw方法,
其算法如下:
如果(取款金额<账户余额), 可直接取款
如果(取款金额>账户余额),就散需要透支的额度,判断可透支overdraft是否足够支付本次透支需要,
如果可以将账户余额修改为0,重减可透支金额
如果不可以,提示用户超过可透支限额
Account:
package com.aff.sup;
public class Account {
protected int id;// 账号
protected double balance;// 余额
protected double annualInterestRate;// 年利率
public Account(int id, double balance, double annualInterestRate) {
super();
this.id = id;
this.balance = balance;
this.annualInterestRate = annualInterestRate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getAnnualInterestRate() {
return annualInterestRate;
}
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate;
}
public double getMonthlyInterest() {
return this.annualInterestRate / 12;
}
// 取钱
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
System.out.println("成功取出" + amount);
} else {
System.out.println("余额不足");
}
}
// 存钱
public void deposit(double amount) {
balance += amount;
System.out.println("成功存入" + amount);
}
}
CheckAccount:
package com.aff.sup;
public class CheckAccount extends Account {
private double overdraft;// 可透支额度
public CheckAccount(int id, double balance, double annualInterestRate, double overdraft) {
super(id, balance, annualInterestRate);
this.overdraft = overdraft;
}
public double getOverdraft() {
return overdraft;
}
public void setOverdraft(double overdraft) {
this.overdraft = overdraft;
}
// 存在可透支额度的取钱
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
System.out.println("成功取出" + amount);
} else if (overdraft >= amount - balance) {
overdraft -= (amount - balance);
balance = 0;
} else {
System.out.println("超过可透支限额");
}
}
}
TestCheckAccount:
package com.aff.sup;
//写一个用户测试Account类, 在用户程序中创建一个账号为1122,余额20000,年利率4.5%的CheckAccount对象
//使用withdraw方法提款5000,并打印个余额与可透支额度
//再使用withdraw 方法提款18000, 并打印个余额与可透支额度
//再使用withdraw 方法提款3000 ,并打印个余额与可透支额度
public class TestCheckAccount {
public static void main(String[] args) {
CheckAccount ca = new CheckAccount(1122, 20000, 0.045, 5000);
ca.withdraw(5000);
System.out.println("当前余额:" + ca.getBalance() + "可透支额度:" + ca.getOverdraft());
ca.withdraw(18000);
System.out.println("当前余额:" + ca.getBalance() + "可透支额度:" + ca.getOverdraft());
ca.withdraw(3000);
System.out.println("当前余额:" + ca.getBalance() + "可透支额度:" + ca.getOverdraft());
}
} 输出结果:
成功取出5000.0
当前余额:15000.0可透支额度:5000.0
当前余额:0.0可透支额度:2000.0
超过可透支限额
当前余额:0.0可透支额度:2000.0
继承性与super的使用练习的更多相关文章
- JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性:②更好 ...
- java 面向对象(十四):面向对象的特征二:继承性 (三) 关键字:super以及子类对象实例化全过程
关键字:super 1.super 关键字可以理解为:父类的2.可以用来调用的结构:属性.方法.构造器3.super调用属性.方法:3.1 我们可以在子类的方法或构造器中.通过使用"supe ...
- Objective-C语言继承性
• 继承性是面向对象的重要概念之一,子类能够继承父类的某些方法和成员变量.作用域限定符为private 的成员变量是不可以被继承的.子还可以重写父类的方法. • 继承是单继承,要多继承引入了协议 •子 ...
- python高级编程之访问超类中的方法:super()
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #超类01 #它是一个内建类型,用于访问属于某个对象超类特性 pri ...
- java封装性、继承性及关键字
方法的参数传递(重点.难点)1.形参:方法声明时,方法小括号内的参数 实参:调用方法时,实际传入的参数的值 2.规则:java中的参数传递机制:值传递机制 1)形参是基本数据类型的:将实参的值传递 ...
- Java中的继承性特性
继承性是java中的第二特性之一.而继承性最为关键的地方为:代码重用性的问题,利用继承性可以从已有的类中继续派生出新的子类,也可以利用子类扩展出更多的操作功能. 继承性的实现代码为:class 子类 ...
- python第四十四课——继承性之单继承
2.继承性 继承: 使用场景: 1).生活层面:... 2).计算机层面: 两部分组成,一部分我们称为父类(基类.超类.superclass),另一部分我们称为子类(派生类.subclass), 子类 ...
- Java_面向对象中的this和super用法
this: 1.使用在类中,可以用来修饰属性.方法.构造器 2.表示当前对象或者是当前正在创建的对象 3.当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加 this 来表明该变量时类成 ...
- Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性
面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...
随机推荐
- 整理高度塌陷与BFC
当面试官问道你高度塌陷时,人们第一想到的方法一定是 .clearfix::after { content: ''; display: block; clear: both; visibility: h ...
- spring的bean的属性注入
一.设置注入 设置注入要求: 要求属性在实体类中必须有getter 和setter方法,然后在spring的工厂中就可以使用property标签进行设值注入. 二.构造注入 通过类的构造方法的方式注入 ...
- 【Hadoop离线基础总结】Hive的安装部署以及使用方式
Hive的安装部署以及使用方式 安装部署 Derby版hive直接使用 cd /export/softwares 将上传的hive软件包解压:tar -zxvf hive-1.1.0-cdh5.14. ...
- QTreeWidget更新后保存节点的展开状态
class Xx : public QWidget { Q_OBJECT struct ItemState{ ItemState(); int _id; bool _isExpend; }; publ ...
- python小游戏-pygame模块
一.tkinter模块的GUI 基本上使用tkinter来开发GUI应用需要以下5个步骤: 导入tkinter模块中我们需要的东西. 创建一个顶层窗口对象并用它来承载整个GUI应用. 在顶层窗口对象上 ...
- Airtable base
PC端习惯了SQL Server Express.Access数据库的强大,安卓端再去用Microsoft Office.WPS,能让你怀疑人生.使用Airtable是个不错的方案,workspace ...
- Java UDP小结
UDP: * 发送端 ...
- [hdu4710 Balls Rearrangement]分段统计
题意:求∑|i%a-i%b|,0≤i<n 思路:复杂度分析比较重要,不细想还真不知道这样一段段跳还真的挺快的=.= 令p=lcm(a,b),那么p就是|i%a-i%b|的循环节.考虑计算n的答案 ...
- 多线程实践—Python多线程编程
多线程实践 前面的一些文章和脚本都是只能做学习多线程的原理使用,实际上什么有用的事情也没有做.接下来进行多线程的实践,看一看在实际项目中是怎么使用多线程的. 图书排名示例 Bookrank.py: 该 ...
- .NET Core接入ElasticSearch 7.5
写在前面 最近一段时间,团队在升级ElasticSearch(以下简称ES),从ES 2.2升级到ES 7.5.也是这段时间,我从零开始,逐步的了解了ES,中间也踩了不少坑,所以特地梳理和总结一下相关 ...