JAVA 构造方法和get,set方法的区别与联

联系:

  • 都可以给对象赋值,都可以访问private私有属性

区别:

  • 构造方法是一次性用品,是初始化对象的时候调用的,而get/set方法则可以多次修改对象的属性
  • 构造方法赋值的时候可以不加引用,如:new 类名( , , , ,),直接可以开辟空间,而get/set方法必须要有引用
  • 最终要的一点是在属性私有化的时候,setget方法可以实现从外部类对属性的访问

今天,我们就来做个关于构造方法和set,get方法的综合练习

题目:1、写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;包含的方法:访问器方法(getter和setter方法),取款方法withdraw(),存款方法deposit(),创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。在CheckAccount类中重写withdraw方法,其算法如下:
如果(取款金额<账户余额),
可直接取款
如果(取款金额>账户余额),
计算需要透支的额度
判断可透支额overdraft是否足够支付本次透支需要,如果可以
将账户余额修改为0,冲减可透支金额
如果不可以
提示用户超过可透支额的限额

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

上代码:

public class Account {
	private String id;
	private double balance;
	private double annualIntersetRate;

	// 为属性设置get/set方法
	public String getId() {
		return id;
	}

	public double getBalance() {
		return balance;
	}

	public double getAnnualIntersetRate() {
		return annualIntersetRate;
	}

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

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

	public void setAnnualIntersetRate(double annualIntersetRate) {
		this.annualIntersetRate = annualIntersetRate;
	}

	// 设置构造器
	public Account(String id, double balance, double annualIntersetRate) {
		this.id = id;
		this.balance = balance;
		this.annualIntersetRate = annualIntersetRate;
	}

	public Account() {

	}


	// 设置取钱方法
	public void withdraw(double money) {
		if (money < this.balance) {
			this.balance = this.balance - money;
			System.out.println("取钱成功,您的余额还剩: " + this.balance );
		} else {
			System.out.println("您的余额不足");
		}

	}

	// 设置存钱的方法
	public void deposit(double money) {
		this.balance = this.balance + money;
		System.out.println("存钱成功,您的余额: " + this.balance);
	}



}

public class CheckAcount extends Account {
	private double overdraft;

	// 重写父类方法
	@Override
	public void withdraw(double money) {
		if ( money > getBalance() + this.overdraft) {
			System.out.println("对不起,您的透支余额不足");
		} else if (money < getBalance())
		{
			super.setBalance( getBalance() - money) ;
			System.out.println("您的余额为: " + super.getBalance() + "透支余额为:" + this.getOverdraft());
		}
		else if (money > getBalance()) {
			this.setOverdraft(getOverdraft() - (money - getBalance()));
			super.setBalance(0);
			System.out.println("您的余额为 " + super.getBalance() + "您的透支余额: " + this.getOverdraft());
		}

	}

	// 利息的get,set方法
	public void setOverdraft(double overdraft) {
		this.overdraft = overdraft;

	}

	public double getOverdraft() {
		return overdraft;
	}

	// 子类构造方法


	public CheckAcount(String id, double balance, double annualIntersetRate, double overdraft) {
		super(id, balance, annualIntersetRate);
		this.overdraft = overdraft;
	}
}
public class AccountTest {
	public static void main(String[] args) {
		CheckAcount a = new CheckAcount("1122",20000,0.045,5000); //构造方法通过set方法赋值
		System.out.println("ID: " + a.getId() + "余额:" + a.getBalance() + "年利率:" + a.getAnnualIntersetRate() + " 可透支: " + a.getOverdraft());
		a.withdraw(5000);
		a.withdraw(16000);
		a.withdraw(10000);
	}
}

结果图:在这里插入图片描述

  • 14
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值