java的子类对象_java 子类对象实例化的过程与习题

本文详细介绍了Java子类对象在继承父类后的实例化过程,强调了子类如何获取父类属性,并通过两个习题演示了类继承的应用。第一个习题涉及创建Account类及其方法,包括取款、存款等操作。第二个习题扩展了Account类为CheckAccount,实现了可透支账户功能,重写了withdraw方法以处理透支情况。
摘要由CSDN通过智能技术生成

大家往往听说  子类继承了父类就有了父类中的所有的非私有的属性,但是怎么就有了父类的属性了呢 ?且听下面分解

子类对象实例化的过程:

1 从结果上来看:(继承性)

子类继承了父类以后 就获取了父类中声明的属性和方法

创建子类对象 在堆空间中 就会加载所有父类中声明的属性

2 从过程来上看 :

当我们通过子类的构造器创建子类的对象是 一定会直接或间接的调用其父类的构造器 进而调用父类的父类的构造器.直到调用了java.langObject类中空参的构造器为止,正因为加载过所有的父类结构 所以才可以看到内存中有父类的结构 子类对象才可以考虑进行调用

明确:虽然创建子类对象时,调用了父类的构造器 但是自始至终就创建了一个对象 即为new的子类对象

习题:

实验 类的继承,super

1、写一个名为 Account 的类模拟账户。该类的属性和方法如下图所示。该类包括的属性: 账号 id,余额 balance,年利率 annualInterestRate;包含的方法:

访问器方法(getter 和 setter 方法),返回月利率的方法 getMonthlyInterest(),取款方法 withdraw(),存款方法 deposit()。

Account private int id private double balance private double annualInterestRate

public Account (int id, double balance, double annualInterestRate )

public int getId() public double getBalance() public double getAnnualInterestRate()

public void setId( int id) public void setBalance(double balance)

public void setAnnualInterestRate(double annualInterestRate)

public double getMonthlyInterest()

public void withdraw (double amount)

public void deposit (doubleamount)

写一个用户程序测试 Account 类。在用户程序中,创建一个账号为1122、余额为 20000、

年利率 4.5%的 Account 对象。使用 withdraw 方法提款 30000 元,并打印余额。 再使用 withdraw 方法提款 2500 元,使用 deposit 方法存款 3000元,然后打印余额和月利 率。

提示:在提款方法 withdraw 中,需要判断用户余额是否能够满足提款数额的要求,如果不 能,应给出提示。 运行结果如图所示:

2、创建 Account 类的一个子类 CheckAccount 代表可透支的账户,该账户中定义一个属性 overdraft 代表可透支限额。在 CheckAccount 类中重写 withdraw 方法,其算法如下: 如果(取款金额账户余额), 计算需要透支的额度 判断可透支额 overdraft 是否足够支付本次透支需要,如果可以 将账户余额修改为 0,冲减可透支金额 如果不可以 提示用户超过可透支额的限额

要求:写一个用户程序测试 CheckAccount 类。在用户程序中,创建一个账号为 1122、余 额为 20000、年利率 4.5%,可透支限额为 5000 元的 CheckAccount 对象。 使用 withdraw 方法提款 5000 元,并打印账户余额和可透支额。 再使用 withdraw 方法提款 18000 元,并打印账户余额和可透支额。 再使用 withdraw 方法提款 3000 元,并打印账户余额和可透支额。

提示: (1) 子类 CheckAccount 的构造方法需要将从父类继承的 3 个属性和子类自己的属性全 部初始化。 (2) 父类Account的属性balance被设置为private,但在子类CheckAccount的withdraw 方法中需要修改它的值,因此应修改父类的 balance 属性,定义其为 protected。

68f724bad5a33d9a9f6bd2ca7369ecb7.png

4a2195c8b79807d0b245afcdfb8022b4.png

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importjava.util.Scanner;public classAprilFaceToAccount {public static voidmain(String[] args) {

AprilFiveAccount account= new AprilFiveAccount(1122,20000,0.0045);

Scanner scanner= newScanner(System.in);int money =scanner.nextInt();

account.withdraw(money);

}

}classAprilFiveAccount{private intid;private double balance; //余额

private double annualInterestRate; //年利率

public AprilFiveAccount (int id, double balance, doubleannualInterestRate ){this.id =id;this.balance =balance;this.annualInterestRate =annualInterestRate;

}public doublegetMonthlyInterest(){//返回月利率

return getAnnualInterestRate()/12;

}public void withdraw (double amount){ //取款

if(amount >balance){

System.out.println("余额不足");

System.out.println("余额为:"+balance);

}else{

balance-=amount;

System.out.println("余额为:"+balance);

System.out.println("月利率为:"+getMonthlyInterest());

}

}public void deposit (double amount){ //存款

if(amount <=0){

System.out.println("输入的不合法");

}

balance+=amount;

System.out.println("余额为:"+balance);

}public intgetId() {returnid;

}public void setId(intid) {this.id =id;

}public doublegetBalance() {returnbalance;

}public void setBalance(doublebalance) {this.balance =balance;

}public doublegetAnnualInterestRate() {returnannualInterestRate;

}public void setAnnualInterestRate(doubleannualInterestRate) {this.annualInterestRate =annualInterestRate;

}

}

习题1

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

class AprilSixAfternoonCheckAccount extendsAprilFiveAccount{public AprilSixAfternoonCheckAccount(int id, double balance, double annualInterestRate,doubleoverdraft) {super(id, balance, annualInterestRate);this.overdraft =overdraft;

}private double overdraft; //可透支额度

public void withdraw(double amount){ //重写取款方法

double residueue =getBalance();if(amount

setBalance(getBalance()-amount);

System.out.println("成功取出: "+amount+"余额为: "+getBalance()+"可透支金额:"+overdraft);

}else if (amount >getBalance()){if(amount-getBalance() >overdraft){

System.out.println("用户超过可透支金额");

System.out.println("withDraw is success 余额为 : "+amount+"额度剩余: "+overdraft);

}else{

overdraft= amount-getBalance()-overdraft ; //透支额度校对

setBalance(0);

System.out.println("withDraw is success 余额为 : "+amount+"额度剩余: "+overdraft);

}

}

}

}

习题2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值