java基础练习题

Java 类的继承练习题

适用于java初学者

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 (double amount)
写一个用户程序测试Account类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%的Account对象。使用withdraw方法提款30000元,并打印余额。
再使用withdraw方法提款2500元,使用deposit方法存款3000元,然后打印余额和月利率。

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

在这里插入图片描述
解答代码:

//首先定义一个Account类模拟账户

public class Account {//定义类的属性
private int id;// 账号
protected double balance;// 余额
private double annualInterstRate;// 年利率

public Account(int id, double balance, double annualInterstRate) {
	super();
	this.id = id;
	this.balance = balance;
	this.annualInterstRate = annualInterstRate;
}

// 返回月利率的方法
public double getMonthlyInterest() {
	return annualInterstRate / 12;

}

// 取款方法
public void withdraw(double amount) {
	if (amount > balance) {
		System.out.println("余额不足");
		System.out.println("余额为:" + balance);
	} else {
		balance = balance - amount;
		System.out.println("余额为:" + balance);
	}
}

// 存款方法
public void deposit(double amount) {
	balance = balance + amount;
	System.out.println("余额为:" + balance);

}

public int getId() {// getter和setter方法
	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 getAnnualInterstRate() {
	return annualInterstRate;
}

public void setAnnualInterstRate(double annualInterstRate) {
	this.annualInterstRate = annualInterstRate;
}

}

定义一个CheckAccount类继承Account类

public class CheckAccount extends Account {

private double overdraft;	// 可透支限额

public CheckAccount(int id, double balance, double annualInterstRate,
		double overdraft) {
	super(id, balance, annualInterstRate);
	this.overdraft = overdraft;
}

public double getOverdraft() {
	return overdraft;
}

public void setOverdraft(double overdraft) {
	this.overdraft = overdraft;
}

// balance:余额
// amount:要取的钱数
// overdraft:可透支限额
public void withdraw(double amount) {
	if (amount < getBalance()) {
		balance = balance - amount;
		System.out.println("余额:" + super.balance);
		System.out.println("可透支余额为:" + overdraft);
	} else {
		if (balance > 0) {
			if (amount - balance <= 5000) {
				overdraft = overdraft - (amount - balance);
				balance = 0;
				System.out.println("余额为:" + balance);
				System.out.println("可透支余额为:" + overdraft);
			}
		} else {
			if (amount - balance > 5000) {
				System.out.println("余额:" + super.balance);
				System.out.println("超过可透支额的限额");
			} else if (overdraft - amount >= 0) {
				overdraft = overdraft - amount;
				System.out.println("余额:" + super.balance);
				System.out.println("可透支余额为:" + overdraft);
			} else if (overdraft - amount < 0) {
				System.out.println("超过可透支额的限额");
				System.out.println("余额:" + super.balance);
				System.out.println("可透支余额为:" + overdraft);
			}
		}
	}
}

}

定义一个用户程序测试TestAccount类

public class TestAccount {

public static void main(String[] args) {

Account a = new Account(1122, 20000.0, 0.045);

a.withdraw(30000);
a.withdraw(2500);
a.deposit(3000);

System.out.println(“月利率:”+a.getMonthlyInterest());
}
}

运行结果:

在这里插入图片描述

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。
运行结果如下图所示:

在这里插入图片描述
解答代码:

//首先定义一个Account类模拟账户

public class Account {//定义类的属性
private int id;// 账号
protected double balance;// 余额
private double annualInterstRate;// 年利率

public Account(int id, double balance, double annualInterstRate) {
	super();
	this.id = id;
	this.balance = balance;
	this.annualInterstRate = annualInterstRate;
}

// 返回月利率的方法
public double getMonthlyInterest() {
	return annualInterstRate / 12;

}

// 取款方法
public void withdraw(double amount) {
	if (amount > balance) {
		System.out.println("余额不足");
		System.out.println("余额为:" + balance);
	} else {
		balance = balance - amount;
		System.out.println("余额为:" + balance);
	}
}

// 存款方法
public void deposit(double amount) {
	balance = balance + amount;
	System.out.println("余额为:" + balance);

}

public int getId() {// getter和setter方法
	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 getAnnualInterstRate() {
	return annualInterstRate;
}

public void setAnnualInterstRate(double annualInterstRate) {
	this.annualInterstRate = annualInterstRate;
}

}

定义一个CheckAccount类继承Account类

public class CheckAccount extends Account {

private double overdraft;	// 可透支限额

public CheckAccount(int id, double balance, double annualInterstRate,
		double overdraft) {
	super(id, balance, annualInterstRate);
	this.overdraft = overdraft;
}

public double getOverdraft() {
	return overdraft;
}

public void setOverdraft(double overdraft) {
	this.overdraft = overdraft;
}

// balance:余额
// amount:要取的钱数
// overdraft:可透支限额
public void withdraw(double amount) {
	if (amount < getBalance()) {
		balance = balance - amount;
		System.out.println("余额:" + super.balance);
		System.out.println("可透支余额为:" + overdraft);
	} else {
		if (balance > 0) {
			if (amount - balance <= 5000) {
				overdraft = overdraft - (amount - balance);
				balance = 0;
				System.out.println("余额为:" + balance);
				System.out.println("可透支余额为:" + overdraft);
			}
		} else {
			if (amount - balance > 5000) {
				System.out.println("余额:" + super.balance);
				System.out.println("超过可透支额的限额");
			} else if (overdraft - amount >= 0) {
				overdraft = overdraft - amount;
				System.out.println("余额:" + super.balance);
				System.out.println("可透支余额为:" + overdraft);
			} else if (overdraft - amount < 0) {
				System.out.println("超过可透支额的限额");
				System.out.println("余额:" + super.balance);
				System.out.println("可透支余额为:" + overdraft);
			}
		}
	}
}

}

定义一个用户程序测试TestAccount类

public static void main(String[] args) {

	CheckAccount w = new CheckAccount(1122, 20000, 0.045,5000);
	w.withdraw(5000);

	w.withdraw(18000);
	
	w.withdraw(3000);

}

}

运行结果:

在这里插入图片描述

3.

练习(基础):
(1)编写一个圆类Circle,该类拥有:
①一个成员变量
Radius(私有,浮点型); // 存放圆的半径;
②两个构造方法
Circle( ) // 将半径设为0
Circle(double r ) //创建Circle对象时将半径初始化为r
③ 三个成员方法
double getArea( ) //获取圆的面积
double getPerimeter( ) //获取圆的周长
void show( ) //将圆的半径、周长、面积输出到屏幕
(2)编写一个圆柱体类Cylinder,它继承于上面的Circle类。还拥有:
①一个成员变量
double hight(私有,浮点型); // 圆柱体的高;
②构造方法
Cylinder (double r, double h ) //创建Circle对象时将半径初始化为r
③ 成员方法
double getVolume( ) //获取圆柱体的体积
void showVolume( ) //将圆柱体的体积输出到屏幕
编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并显示圆半径、圆面积、圆周长,圆柱体的体积。
//如何进行封装
/*1.属性私有化化:private
2.提供get和set方法
*/

//一个圆类Circle

public class Circle {// 一个成员变量 Radius(私有,浮点型)
protected double Radius;// 圆的半径

public double getRadius() {
	return Radius;
}

public void setRadius(double radius) {
	Radius = radius;
}

// 两个构造方法
public Circle() {
	Radius = 1;
}

public Circle(double radius) {
	super();
	Radius = radius;
}

// 三个成员方法
public double getArea() {// 获取圆的面积
	double s = Radius * Radius * 3.14;
	return s;

}

public double getPerimeter() {// 获取圆的周长
	double c = 2 * 3.14 * Radius;
	return c;
}

public void show() { // 将圆的半径、周长、面积输出到屏幕
	System.out.println("圆的半径:" + getRadius());
	System.out.println("圆的周长:" + getPerimeter());
	System.out.println("圆的面积:" + getArea());
}

}

// Cylinder类

public class Cylinder extends Circle {// 继承Circle类
// 成员变量
private double hight;// 圆柱体的高

// 构造方法

public Cylinder(double radius, double hight) {
	super();

	this.hight = hight;
}

public Cylinder() {

}

// 成员方法
public double getVolume() {// 获取圆柱体的体积
	return super.getArea() * hight;

}

public void showVolume() { // 将圆柱体的体积输出到屏幕
	System.out.println("圆柱的高:" + getHight());
	System.out.println("圆柱体的体积:" + getVolume());
}

// getter,setter
public double getHight() {
	return hight;
}

public void setHight(double hight) {
	this.hight = hight;
}

}

//测试类

public class TestCircle {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	Cylinder c = new Cylinder();
	//输入半径2,圆柱的高为2
	c.setRadius(1);
	c.setHight(2);
	//调用计算面积,体积的方法
	c.show();
	c.showVolume();
}

}

运行结果:

在这里插入图片描述

4.

定义一个人的类(属性有名字,年龄,性别。写一个能输出各个属性值的方法showInfo()),定义一个学生类(属性有学号),学生继承人类,要求:
(1)父类的属性赋值用构造方法来实现(分别用有参数构造方法和无参数构造方法实现);
(2)子类的属性也用构造方法来赋值;
(3)在子类中重写父类的showInfo()方法
(4)声明学生类的对象,调用学生的显示信息的方法。

//Person类

public class Student extends Person{
private int sNo;

public int getsNo() {
return sNo;
}

public void setsNo(int sNo) {
this.sNo = sNo;
}
public Student(){
sNo = 1002;
}
public Student(double sNo){
super();
sNo = sNo;
}
public void showInfo(){
System.out.println(“姓名:”+getName()+",年龄:"+getAge()+",性别:"+getSex()
+",学号:"+getsNo());
}
}

//Student类

public class Student extends Person{
private int sNo;

public int getsNo() {
return sNo;
}

public void setsNo(int sNo) {
this.sNo = sNo;
}
public Student(){
sNo = 1002;
}
public Student(double sNo){
super();
sNo = sNo;
}
public void showInfo(){
System.out.println(“姓名:”+getName()+",年龄:"+getAge()+",性别:"+getSex()
+",学号:"+getsNo());
}
}

//测试类

public class TestPerson {

public static void main(String[] args) {
	Student s = new Student();
	s.setName("老宋");
	s.setAge(20);
	s.setSex("男");
	s.setsNo(1002);
	s.showInfo();

}
}
运行截图:
在这里插入图片描述

版权声明:本文为weixin_42052662原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42052662/article/details/97392476

智能推荐

Hibernate学习总结(一)

一、Hibernate简介 一个持久层的ORM框架。ORM:Object Relational Mapping(对象关系映射)。指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。 二、Hibernate入门 1、创建一个项目,引入jar包 hibernate用到的jar包 2、创建表 3、创建实体类 4、创建映射(*****) 映射需要通过XML...

Linux系统NFS

文章目录 1. nfs简介 1.1 nfs特点 1.2 使用nfs的好处 1.3 nfs的体系组成 1.4 nfs的应用场景 2. nfs工作机制 2.1 RPC 2.2 NIS 2.3 nfs工作机制 3. exports文件的格式 4. nfs管理 5. 作业 5.1手动搭建一个nfs服务器 5.1.1开放/nfs/shared目录,供所有用户查阅资料 5.1.2 开放/nfs/upload目...

关于java中String,StringBuffer,StringBuilder的区别以及StringBuffer,StringBuilder的安全性问题

这里的结果就是正确的然后我们来看他的append方法 它在前边加了一个synchronized来修饰,相当于同时只能有一个线程来访问他,这样就不会产生上边的问题但同时他的效率也就比StringBuilder低,...

Django连接现有mysql数据库

1、打开cmd后cd到项目位置 2、建立项目 django-admin startproject test2 3、编辑项目中的配置文件, mysite/settings.py ,告诉Django你的数据库连接参数和数据库名。具体的说,要提供 DATABASE_NAME , DATABASE_ENGINE , DATAB...

ShareSDK新浪微博登录时报错error:redirect_uri_mismatch

今天用 ShareSDK 做第三方登录的时候碰到个问题,明明在微博平台的应用审核已经通过了,但是调用登录接口的时候一直报错,错误如下: 出现这个错误是因为在微博开放平台上没有设置回调地址,或者设置的回调地址与本地XML中的地址不一致。 在sharesdk.xml文件当中对于微博的设置: 其中RedirectUrl为设置的回调地址,这里的地址必须要与微博开发平台设置的地址相同,否则就会出现上面的错误...

猜你喜欢

python解析网络封包方法

2019独角兽企业重金招聘Python工程师标准>>> 在使用Python解析网络数据包时,使用网络字节序解析,参见下表。 C语言的数据类型和Python的数据类型对照表请参见下表。 接下来对封包与解包进行举例说明。 version type id content unsigned short unsigned short unsigned int unsigned int 封包...

python3:时间方法,异常处理,系统文件相关模块(os)

文章目录 时间方法 time模块 时间表示方法: time模块的方法 datetime模块 异常处理 触发异常 创建mydiv.py脚本,要求如下: 创建myerror.py脚本,要求如下: os模块 实现ls -R(os.walk) os.path pickle模块 记账脚本 时间方法 time模块 时间表示方法: 时间戳:自1970-1-1 0:00:00到某一时间点之间的秒数 UTC时间:世...

负载均衡群集——LVS+DR模型

一、实验组成 调度器 192.168.100:41 web1 192.168.100:42 web2 192.168.100.43 NFS共享服务器 192.168.100.44 二、实验拓扑 三、实验配置 3.1在调度器配置:192.168.100.41 配置虚拟IP地址(VIP) 调整/proc响应参数 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭...

adb无线连接时appium找不到设备

问题描述 以前使用USB连接真机,运行appium时一直正常,连接参数如下: 最近为了方便,使用adb无线连接真机,adb版本为1.0.40,真机安卓版本10,连接后,通过adb devices能够查看到连接的设备: adb无线连接是正常的,但每次运行时appium都找不到无线连接的设备,陷入重启adb循环: 解决流程 1.因为是没找到设备,所以在appium连接参数中增加了"udid&...

Mybatis_CRUD(基于xml的增删改查操作)

dao IUserDao domain User QueryVo SqlMapConfig.xml com.itheima.dao IUserDao.xml com.itheima.test 执行原理图:...