上机实验4 java类的应用.docx
- 文档编号:12818020
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:13
- 大小:18.52KB
上机实验4 java类的应用.docx
《上机实验4 java类的应用.docx》由会员分享,可在线阅读,更多相关《上机实验4 java类的应用.docx(13页珍藏版)》请在冰豆网上搜索。
上机实验4java类的应用
1.熟悉多态性的两种形式:
1)方法重载overload:
在一个Math类中,定义多个同名方法Add,分别用来计算2个int、float、double型数之和,并写一个测试程序完成测试。
2)重写override
a)定义一个父类Sale,提供2个方法:
getSalePrice、setSalePrice,然后再定义一个子类DiscountSale,重写相关方法。
写一个测试程序,根据不同情况,选择不同的销售策略,验证多态性。
b)定义一个父类Game,提供方法Play,然后再定义几个子类Basketball,Football,分别重写Play方法,然后写一个测试程序,验证多态性。
2.定义一个抽象父类Game,抽象方法Play、getGameName,然后再定义2个子类Basketball,Football,分别重写抽象方法,然后写一个通用中间类,只需要一个方法。
用来调用各子类的以上方法。
最后,写一个测试程序,通过通用中间类验证多态性。
(指出通用中间类中的关键点是什么?
)
3.在题2的基础上,若要增加一个新的子类Tennis,实现扩展功能,如何去做?
(注意:
不可改变框架中的任何类–测试程序除外)---总结关键点有哪些?
4.针对题2进行改写。
定义一个接口Game,实现以上2,3题的内容。
5.将书本中例6.1、6.2、6.3进行练习,理解相关使用规则。
6.自定义一个异常类:
定义一个BankAccount类,其中方法(取钱):
withdraw,当取的钱大于余额balance时,捕获异常。
并写出测试程序验证。
7.熟悉多态性的两种形式:
3)方法重载overload:
在一个MyMath类中,定义多个同名方法Add,分别用来计算2个int、float、double型数之和,并写一个测试程序完成测试。
packagefour.exercise.java;
/*
1)方法重载overload:
在一个MyMath类中,定义多个同名方法Add,
分别用来计算2个int、float、double型数之和,
并写一个测试程序完成测试。
*/
publicclassMyMath{
intAdd(inta,intb){
return(a+b)*10;
}
floatAdd(floata,floatb){
return(a+b)*20;
}
doubleAdd(doublea,doubleb){
return(a+b)*30;
}
//测试代码–用来验证不同Add方法的调用(传入参数的类型不同,选取的Add方法不同)
publicstaticvoidmain(Stringargs[]){
MyMathmm=newMyMath();
intresult1=mm.Add(3,5);
floatresult2=mm.Add(3.0f,5.0f);
doubleresult3=mm.Add(3.0,5.0);
System.out.println("result1="+result1);
System.out.println("result2="+result2);
System.out.println("result3="+result3);
}
}
4)重写override
c)定义一个父类Sale,提供2个方法:
getSalePrice、setSalePrice,然后再定义一个子类DiscountSale,重写相关方法。
写一个测试程序,根据不同情况,选择不同的销售策略,验证多态性。
packagefour.exercise.java;
/*
*a)定义一个父类Sale,提供2个方法:
getSalePrice、setSalePrice,
*然后再定义一个子类DiscountSale,重写相关方法。
*写一个测试程序,根据不同情况,选择不同的销售策略,验证多态性。
*
*/
classSale{
Stringname="";//销售活动名称:
圣诞节促销、正常销售、情人节促销等等
StringgoodsName="";//某个商品的名称
doublesalePrice=0.0;//某个商品的销售价格
//默认构造方法-为了子类的需要
Sale(){
}
//构造方法-创建对象时,即初始化销售活动名称、商品名称、销售价格
Sale(Stringname,StringgoodsName,doubleprice){
this.name=name;
this.goodsName=goodsName;
this.salePrice=price;
}
//设置销售活动名称
voidsetSaleName(Stringname){
this.name=name;
}
//获取销售活动名称
StringgetSaleName(){
returnname;
}
//设置商品名称
voidsetGoodsName(StringgoodsName){
this.goodsName=goodsName;
}
//获取商品名称
StringgetGoodsName(){
returngoodsName;
}
//获取销售价格
doublegetSalePrice(){
returnsalePrice;
}
//设置其销售价格
voidsetSalePrice(doubleprice){
salePrice=price;
}
voidOutMessage(){
System.out.println(getSaleName()+"期间,商品:
"+getGoodsName()
+"的价格是:
"+getSalePrice());
}
}
classDiscountSaleextendsSale{
doublediscount=1.0;
doublegetSalePrice(){
returnsalePrice*discount;
}
voidsetSalePrice(doubleprice){
salePrice=price;
}
voidsetDiscount(doublediscount){
this.discount=discount;
}
}
publicclassSaleDemo{
publicstaticvoidmain(Stringargs[]){
//测试父类Sale
Salesale=newSale("正常销售","T恤",100.0);
sale.OutMessage();
sale.setSaleName("圣诞节促销");
sale.setSalePrice(80.0);
sale.OutMessage();
//测试子类DiscountSale
DiscountSaleds=newDiscountSale();
ds.setSaleName("情人节促销");
ds.setGoodsName("牛仔裤");
ds.setSalePrice(120.0);//不打折时的价格
ds.OutMessage();
ds.setDiscount(0.6);//打折:
6折
ds.OutMessage();
}
}
d)定义一个父类Game,提供方法Play,然后再定义几个子类Basketball,Football,分别重写Play方法,然后写一个测试程序,验证多态性。
/*
b)定义一个父类Game,提供方法Play,然后再定义几个子类
Basketball,Football,分别重写Play方法,然后写一个测试程序,验证多态性。
*/
packagefour.exercise.java;
classGame{
voidplay(){
}
}
classBasketballextendsGame{
voidplay(){
System.out.println("现在开始打篮球!
");
}
}
classFootballextendsGame{
voidplay(){
System.out.println("现在开始踢足球!
");
}
}
classTennisextendsGame{
voidplay(){
System.out.println("现在开始打网球!
");
}
}
//测试程序
publicclassGameDemo{
publicstaticvoidmain(Stringargs[]){
Gamegame;
game=newBasketball();
game.play();
game=newFootball();
game.play();
game=newTennis();
game.play();
}
}
8.定义一个抽象父类Game,抽象方法play、getGameName,然后再定义2个子类Basketball,Football,分别重写抽象方法,然后写一个通用中间类,只需要一个方法。
用来调用各子类的以上方法。
最后,写一个测试程序,通过通用中间类验证多态性。
(指出通用中间类中的关键点是什么?
)
通用中间类中的关键点是:
方法的参数中,用抽象类来定义变量,这样,可以确保传入任意子类对象。
/*
定义一个抽象父类Game,抽象方法play、getGameName,然后再定义2个子类Basketball,Football,
分别重写抽象方法,然后写一个通用中间类,只需要一个方法。
用来调用各子类的以上方法。
最后,写一个测试程序,通过通用中间类验证多态性。
(指出通用中间类中的关键点是什么?
)
*/
packageAbstractGame.four.exercise.java;
abstractclassGame{
publicabstractvoidplay();
publicabstractStringgetGameName();
}
classBasketballextendsGame{
StringgameName;
Basketball(Stringname){
gameName=name;
}
publicvoidplay(){
System.out.println("现在开始打篮球!
");
}
publicStringgetGameName(){
returngameName;
}
}
classFootballextendsGame{
StringgameName;
Football(Stringname){
gameName=name;
}
publicvoidplay(){
System.out.println("现在开始踢足球!
");
}
publicStringgetGameName(){
returngameName;
}
}
//中间类-通过中间类,接收参数为Game类的对象或Game类的子类对象,从而调用不同子类的play方法
classMiddleClass{
voidcallPlay(Gamegame){
System.out.print(game.getGameName()+"运动时间:
");
game.play();
}
}
//测试程序
publicclassAbstractGameDemo{
publicstaticvoidmain(Stringargs[]){
Gamegame;
MiddleClassmc=newMiddleClass();
game=newBasketball("篮球");
mc.callPlay(game);
game=newFootball("足球");
mc.callPlay(game);
}
}
9.在题2的基础上,若要增加一个新的子类Tennis,实现扩展功能,如何去做?
(注意:
不可改变框架中的任何类–测试程序除外)---总结关键点有哪些?
仿照Football类增加一个Tennis类(微小不同之处稍作调整)。
然后在AbstractGameDemo类中,增加2行测试代码:
game=newTennis("网球");
mc.callPlay(game);
原有的类:
Game、Basketball、Football、MiddleClass均不用做任何修改。
关键点:
1)Game类作为抽象父类,Tennis子类继承于它;
2)中间类MiddleClass中,方法中的参数用抽象类定义–可接收多个子类;
3)使用上转型对象来实现以上要求。
10.针对题2进行改写。
定义一个接口Game,实现以上2,3题的内容。
在以上基础上,Game类定义为接口,各子类实现该接口;另外MiddleClass类的方法参数中,用接口定义参数变量;main方法中,用接口定义变量–采用接口回调完成以上功能。
11.将书本中例6.1、6.2、6.3进行练习,理解相关使用规则。
略。
12.自定义一个异常类:
定义一个BankAccount类,其中方法(取钱):
withdraw,当取的钱大于余额balance时,捕获异常。
并写出测试程序验证。
/*自定义一个异常类:
定义一个BankAccount类,其中方法(取钱):
*withdraw,当取的钱大于余额balance时,捕获异常。
并写出测试程序验证。
*/
packageException.four.exercise.java;
//余额不足异常类
classLessBalanceExceptionextendsException{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
Stringmessage;
publicLessBalanceException(doublemoney){
message="您想取钱"+money+",但是您的账户中的余额不足!
";
}
publicStringtoString(){
returnmessage;
}
}
classBankAccount{
privatedoublemoneyWithdraw=0;//取款金额
//假设客户的账户中只有1000元
privatedoublebalance=1000.0;
//money-客户想取的钱
publicvoidwithdraw(doublemoney)throwsLessBalanceException{
if(money>balance)
{
thrownewLessBalanceException(money);
}
else
this.moneyWithdraw=money;
}
//当客户取钱少于账户中的余额时,显示客户取款的金额
publicdoublegetMoney(){
System.out.println("客户刚刚取钱:
"+moneyWithdraw+"元!
");
returnmoneyWithdraw;
}
}
publicclassExceptionDemo{
publicstaticvoidmain(Stringargs[]){
BankAccountba=newBankAccount();
try{
//取款100元
ba.withdraw(100);
ba.getMoney();
//取款500元
ba.withdraw(500);
ba.getMoney();
//取款1500元
ba.withdraw(1500);
ba.getMoney();
}
catch(LessBalanceExceptione){
System.out.println(e.toString());
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机实验4 java类的应用 上机 实验 java 应用