练习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的使用练习的更多相关文章

  1. JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性:②更好 ...

  2. java 面向对象(十四):面向对象的特征二:继承性 (三) 关键字:super以及子类对象实例化全过程

    关键字:super 1.super 关键字可以理解为:父类的2.可以用来调用的结构:属性.方法.构造器3.super调用属性.方法:3.1 我们可以在子类的方法或构造器中.通过使用"supe ...

  3. Objective-C语言继承性

    • 继承性是面向对象的重要概念之一,子类能够继承父类的某些方法和成员变量.作用域限定符为private 的成员变量是不可以被继承的.子还可以重写父类的方法. • 继承是单继承,要多继承引入了协议 •子 ...

  4. python高级编程之访问超类中的方法:super()

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #超类01 #它是一个内建类型,用于访问属于某个对象超类特性 pri ...

  5. java封装性、继承性及关键字

    方法的参数传递(重点.难点)1.形参:方法声明时,方法小括号内的参数   实参:调用方法时,实际传入的参数的值 2.规则:java中的参数传递机制:值传递机制 1)形参是基本数据类型的:将实参的值传递 ...

  6. Java中的继承性特性

    继承性是java中的第二特性之一.而继承性最为关键的地方为:代码重用性的问题,利用继承性可以从已有的类中继续派生出新的子类,也可以利用子类扩展出更多的操作功能. 继承性的实现代码为:class 子类 ...

  7. python第四十四课——继承性之单继承

    2.继承性 继承: 使用场景: 1).生活层面:... 2).计算机层面: 两部分组成,一部分我们称为父类(基类.超类.superclass),另一部分我们称为子类(派生类.subclass), 子类 ...

  8. Java_面向对象中的this和super用法

    this: 1.使用在类中,可以用来修饰属性.方法.构造器 2.表示当前对象或者是当前正在创建的对象 3.当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加 this 来表明该变量时类成 ...

  9. Java学习:面向对象的三大特征:封装性、继承性、多态性之继承性

    面向对象的三大特征:封装性.继承性.多态性. 继承 继承是多态的前提 ,如果没有继承,就没有多态. 继承主要解决的问题就是:共性抽取. 继承关系当中的特点: 子类可以拥有父类的“内容” 子类还可以拥有 ...

随机推荐

  1. Java——Spring依赖配置详解

    <properties> <junit.version>4.12</junit.version> <spring.version>4.3.9.RELEA ...

  2. spring学习笔记(九)事务学习(上)

    前述 ​ 这段时间在工作中碰到一个事务相关的问题.先说下这个问题的场景,我们是一个商城项目,正在开发优惠券模块,现在有一个需求是需要批量领取优惠券,而且在领券时,其中一张领取失败不能影响其他符合要求的 ...

  3. Qt保持窗口在最上方

    原文:https://blog.csdn.net/hl1hl/article/details/85244451 前言 在Qt开发桌面软件的过程中,根据开发的需求不同,我们经常需要将弹出窗口,一般常见的 ...

  4. 【Scala】scala的继承能干嘛?这段简单的代码或许能帮你梳理

    package cn.itcast.scala.demo2 class Person { //private关键字和final关键字修饰的常量无法被继承重写 val id: Int = 1 var n ...

  5. Java TCP案例网络聊天室

    收获:1,加深了对多线程的一边一边的理解,可以将行为写成不同的类然后多线程 2,IO流的复习! 3,多线程中一边读取一边操作时容器最好(CopyOnWriteArrayList); 4,Tcp流程的熟 ...

  6. Python3+Pycharm+PyQt5环境搭建步骤

    搭建环境: 操作系统:Win10 64bit Python版本:3.7 Pycharm:社区免费版 一.Python3.7安装 下载链接:官网 https://www.python.org/downl ...

  7. springMVC的自定义annotation(@Retention@Target)详解

    自定义注解: 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节.在定义注解时,不能继承其他的注解或接口.@ ...

  8. search(13)- elastic4s-histograms:聚合直方图

    在聚合的分组统计中我们会面临两种分组元素类型:连续型如时间,自然数等.离散型如地点.产品等.离散型数据本身就代表不同的组别,但连续型数据则需要手工按等长间隔进行切分了.下面是一个按价钱段聚合的例子: ...

  9. 10大Web漏洞扫描工具

    Web scan tool 推荐10大Web漏洞扫描程序 Nikto 这是一个开源的Web服务器扫描程序,它可以对Web服务器的多种项目(包括3500个潜在的危险文件/CGI,以及超过900个服务器版 ...

  10. 「雕爷学编程」Arduino动手做(18)---太阳能电池模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...