面向对象练习.docx
《面向对象练习.docx》由会员分享,可在线阅读,更多相关《面向对象练习.docx(8页珍藏版)》请在冰豆网上搜索。
面向对象练习
任务四:
售粉小程序
知识点:
构造方法的使用及this的两种用法
为“无名的粉”写一个类:
classWuMingFen(注:
“无名”是长沙一家很有特色的粉店)要求:
1.有三个属性:
面码:
StringtheMa粉的分量(两):
intquantity
是否带汤:
booleanlikeSoup
2.写一个普通方法:
check(),用于查看粉是否符合要求。
即:
将对象的三个属性打印在控制台上。
3.写一个构造方法,以便于简化初始化过程,如,叫一碗3两牛肉带汤的粉:
WuMingFenf1=newWuMingFen("牛肉",3,true);
4.重载构造方法,使得初始化过程可以多样化,比如叫一碗2两鸡丝粉,则默认是带汤的:
WuMingFenf2=newWuMingFen("鸡丝",2);
5.如何顾客这样说:
老板,一碗粉。
则默认是酸辣面码、2两、带汤的?
WuMingFenf3=newWuMingFen();
6.调用check()方法,将上面每碗粉的属性都打印在控制台上。
classWuMingFen{
StringtheMa;
intquantity;
booleanlikeSoup;
WuMingFen(StringtheMa,intquantity,booleanlikeSoup){
This.theMa=theMa;
This.quantity=quantity;
This.likeSoup=likeSoup;
}
publicvoidcheck(){
System.out.println(thema+””+quantity+””+likeSoup);
}
}
任务五:
让计算机见识我们生活中的重载
知识点:
定义新的类型、普通方法的重载及其调用
厨师能够做很多菜,我们可以用一个动词来概括他的行为:
烹饪。
现在在厨师类中把烹饪cook()这个行为进行重载,将不同类型的食物作为参数定义在重载的cook()方法中。
根据传入的不同的食物类型,调用不同的重载cook()方法从而做出不同的菜来。
步骤1.定义各种“食物类“,如Rice,Fish,Vegetable,Dumpling……注意:
这里只要求我们创造一些食物的类型,想想定义一个类型代码最少的写法是怎样的?
提示:
类里面可以不写任何代码。
(Food)
2.写一个厨师类,名为Chef,在类中写关于“烹饪Xxx”的各种重载方法。
如:
voidcook(Ricer){
System.out.println(“煮饭”);
}
3.在main()中,调用cook()方法。
如:
DoCookdc=newDoCook();
Ricer=newRice();
dc.cook(r);
此时控制台上应出现:
煮饭
任务六:
网站人数计数器
知识点:
使用static成员
1.定义一个网站用户类:
User。
其中有属性staticintcounter用来记录该用户是第几位登录的用户。
该静态变量被初始化为0。
2.写一个静态方法:
staticshowCount(),要求能在控制台上输出Counter的值。
3.每当一个新的用户登录,要求counter值加1。
做法:
在该类的构造函数中,实现counter++;
4.在main()中,未产生任何用户对象之前,调用showCount();
5.使用for循环new10个用户,并调用showCount()方法查看网站登录总人数。
classUser{
staticintcounter;
User(){
counter++;
}
PublicstaticvoidshowCount(){
System.out.println(counter);
}
Publicstaticvoidmain(String[]args){
For(inti=0;i<10;i++){
Useruser=newUser();
}
User.showCount();
}
}
任务七:
写一个可以给员工发工资的程序。
知识点:
继承方法重写super的用法
步骤一:
设计一个雇员类Employee,其成员属性是姓名name(String型),工资wage(double型),另有一个获得总收入的成员方法doublegetSalary()(普通雇员的工资即为总收入)。
Employee的构造方法publicEmployee(doublewage)的作用是给工资赋值。
步骤二:
设计一个经理类Manager,它继承于Employee,与Employee相比,增加了一个成员属性奖金allowance(double型),也有一个获得总收入的成员方法doublegetSalary()(经理的总收入=工资+奖金)。
Manager的构造方法是给工资和奖金赋值。
步骤三:
写一个测试类:
其中有语句:
Employeeemp=newEmployee(2500);
System.out.println(emp.getSalary());
Managerm=newManager(3000,500);
System.out.println(m.getSalary());
则控制台上结果应为:
2500.0
3500.0
classEmployee{
Stringname;
doublewage;
publicdoublegetSalary(){
returnwage;
}
PublicEmployee(doublewage){
this.wage=wage;
}
}
ClassManagerextendsEmployee{
doubleallowance;
Manager(doublewage,doubleallowance){
super(wage);
this.allowance=allowance;
}
publicdoublegetSalary(){
returnwage+allowance;
}
}
任务八:
请用尽量简练的话对四种访问权限做一个总结。
参考答案:
public完全公开
protected包内公开+隔包父子公开
缺省包内公开
private类中公开
任务九:
根据下列代码回答问题:
classVehicle{
publicvoidmove(){
System.out.println("avehiclemoving...");
}
}
publicclassCarextendsVehicle{
publicvoidrun(){
System.out.println("acarrunning...");
}
publicstaticvoidmain(String[]args){
Vehiclebenz=newCar();
benz.run();
}
}
提问:
上述代码能通过编译吗?
如果不能,请说明理由。
任务十:
当一回娱乐主播!
说明:
本题涉及设计思想,仅为启发之用。
如果按步骤提示能够将代码完成,即光荣完成任务。
开场白:
ShowbizShowbizAlwaysShowbiz~~~娱乐急先锋,娱乐消息八面通~各位观众大家好,我是娱乐主播爪哇欧欧劈,今天要八卦的明星有三位:
分别是:
歌舞都飙得不错的溜得滑(虽然喜欢有事没事地摔跤);以及酷爱乱摆pose,乱唱乱跳的芙蓉打劫(已经无数次地打劫了我们的眼睛和耳朵,那是相当的惊艳);最后当然还有颇具商业头脑的酒吧掌柜当红明星你轧棚(生意太好了吧,连棚都挤跨了)……
步骤一:
写一个抽象明星父类Star.要求其中有:
成员
成员名
说明
属性
Stringname
明星的名字
属性
intsalary
明星的收入
方法
Star(Stringname,intsalary)
构造方法,初始化成员属性(子类构造方法要用到super(Stringn,ints))
方法
getInfo()
非抽象的,输出name和salary的值
方法
sing()
抽象方法
方法
dance()
抽象方法
步骤二:
写一个GoodStar类继承于Star类,要求如下:
成员
成员名
说明
方法
GoodStar(Stringname,intsalary)
构造方法
方法
sing()
覆盖父类的方法,应能打印出“唱得好”
方法
dance()
覆盖父类的方法,应能打印出“跳得棒”
步骤三:
写一个炒作明星类OhMyGodStar类继承于Star类:
成员
成员名
说明
方法
OhMyGodStar(Stringname,intsalary)
构造方法
方法
sing()
覆盖父类的方法,应能打印出“这也叫歌?
”
方法
dance()
覆盖父类的方法,应能打印出“观众崩溃了”
步骤四:
定义一个接口:
Business
成员
成员名
说明
方法
sell(Stringxx)
声明一个卖方法
步骤五:
写一个有商业头脑的明星类BusinessStar,继承于Star类,并且实现Business接口
成员
成员名
说明
方法
BusinessStar(Stringname,intsalary)
构造方法
方法
sell(Stringxx)
覆盖卖方法,打印出“卖xx”
方法
sing()
覆盖父类的方法,能打印出“能歌”
方法
dance()
覆盖父类的方法,能打印出“会舞”
步骤六:
测试
StarliuDeHua=newGoodStar(“溜得滑”,274000);
liuDeHua.getInfo();
liuDeHua.sing();
liuDeHua.dance();
StarfuRongDaJie=newOhMyGodStar(“芙蓉打劫”,280);
fuRongDaJie.getInfo();
fuRongDaJie.sing();
fuRongDaJie.dance();
BusinessStarliYaPeng=newBusinessStar(“你轧棚”,547000);
liYaPeng.getInfo();
liYaPeng.sing();
liYaPeng.dance();
liYaPeng.sell(“芝华士”);//注意,由于sell()方法不是Star类中的方法,所以这里不能使用转型的引用,只能用子类的引用。
测试结果: