Java习题(三)

您所在的位置:网站首页 子类的继承性 Java习题(三)

Java习题(三)

2023-12-10 11:11| 来源: 网络整理| 查看: 265

1.根据下面的要求,编写Java应用程序实现:

编写程序模拟中国人、美国人是人;北京人是中国人。除主类外,程序中还有4个类:People、ChinaPeople、AmericanPeople和BeijingPeople类。要求如下:

l People类有权限是protected的double型成员变量height和weight,以及public void speakHello()、public void averageHeight()和public void averageWeight()方法。

l ChinaPeople类是People的子类,新增了public void chinaGongfu()方法。要求ChinaPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。

l AmericanPeople类是People的子类,新增public void americanBoxing()方法。要求AmericanPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。

l BeijingPeople类是ChinaPeople的子类,新增public void beijingOpera()方法。要求ChinaPeople重写父类的public void speakHello()、public void averageHeight()和public void averageWeight()方法。

在主类中定义各类的对象并调用其方法输出相应信息。

public class People { protected double height; protected double weight; public void speakHello(){ System.out.print("People说:"+"Are you OK? Hello! Thank you!\n"); } public void averageHeight(){ System.out.print("People平均身高:"+"170cm\n"); } public void averageWeight(){ System.out.print("People平均体重:"+"65kg\n"); } } public class ChinaPeople extends People{ public void chinaGongfu(){ System.out.print("这是中国功夫~pia,pia,阿达~\n"); } public void speakHello(){ System.out.print("中国人说: "+"你好呀\n"); } public void averageHeight(){ System.out.print("中国人平均身高: "+"180cm\n"); } public void averageWeight(){ System.out.print("中国人平均体重: "+"65kg\n"); } } public class AmericanPeople extends People{ public void americanBoxing(){ System.out.print("come on,朴茨大慈朴茨大慈嘟嘟嘟嘟嘟~\n"); } public void speakHello(){ System.out.print("美国人说: "+"Hello\n"); } public void averageHeight(){ System.out.print("美国人平均身高: "+"150cm\n"); } public void averageWeight(){ System.out.print("美国人平均体重: "+"100kg\n"); } } public class BeijingPeople extends ChinaPeople{ public void beijingOpera(){ System.out.print("您倒是真入了化境,连雌雄都不分了。\n"); } public void speakHello(){ System.out.print("老北京人说: "+"这题写的不得劲啊\n"); } public void averageHeight(){ System.out.print("北京人平均身高: "+"185cm\n"); } public void averageWeight(){ System.out.print("北京人平均体重: "+"70kg\n"); } } import my_work.AmericanPeople; import my_work.ChinaPeople; import my_work.BeijingPeople; public class main_1 { public static void main(String args[]){ People p = new People(); ChinaPeople Cp = new ChinaPeople(); AmericanPeople Ap = new AmericanPeople(); BeijingPeople C_Bp = new BeijingPeople(); p.speakHello(); p.averageHeight(); p.averageWeight(); Cp.speakHello(); Cp.chinaGongfu(); Cp.averageHeight(); Cp.averageWeight(); Ap.speakHello(); Ap.americanBoxing(); Ap.averageHeight(); Ap.averageWeight(); C_Bp.speakHello(); C_Bp.beijingOpera(); C_Bp.averageHeight(); C_Bp.averageWeight(); } }

2.根据下面的描述,编写Java程序实现:

假设银行Bank已经有了按整年year计算利息的一般方法,其中year只能取正整数。比如按整年计算的方法: double computerInterest() { interest=year*0.035*savedMoney; return interest; } 建设银行ConstructionBank是Bank的子类,准备隐藏继承的成员变量year,并重写计算利息的方法,即自己声明一个double型的year变量,比如,当year取值为5.216时,表示要计算5年零216天的利息,但希望首先按银行Bank的方法computerInterest()计算出5整年的利息,然后再自己计算216天的利息。那么,建设银行就必须把5.216的整数部分赋给隐藏的year,并让super调用隐藏的、按整年计算利息的方法。 要求ConstructionBank和BankOfQingdao类是Bank类的子类,ConstructionBank和BankOfQingdao都使用super调用隐藏的成员变量和方法。 计算5万元存5年零216天,在建设银行和青岛银行存的话,利息差额是多少? ConstructionBank、BankOfQingdao和Bank类的UML图如下所示:

注:整年利率:0.035 ,建设银行按天计算利率:0.0001,青岛银行按天计算利率:0.00015

功能扩展:

参照建设银行或青岛银行,再编写一个商业银行,让程序输出8000元存在商业银行8年零236天的利息。商业银行按天计算利率是0.00012

public class Bank { int savedMoney; int year; double interest; Bank(){} public double computerInterest() { interest=year*0.035*savedMoney; return interest; } } public class ConstructionBank extends Bank{ double year; ConstructionBank(double year,int savedMoney){ super(); this.year=year; super.year=(int)year; this.savedMoney=savedMoney; } public double computerInterest() { interest=super.computerInterest()+(year-(int)year)*0.1*savedMoney; //year-(int)year里面包含三位小数 return interest; } } public class BankOfQingdao extends Bank{ double year; BankOfQingdao(double year,int savedMoney){ super(); this.year=year; super.year=(int)year; this.savedMoney=savedMoney; } public double computerInterest() { interest=super.computerInterest()+(year-(int)year)*0.15*savedMoney; //year-(int)year里面包含三位小数 return interest; } } public class CommercialBank extends Bank { double year; CommercialBank(double year,int savedMoney){ super(); this.year=year; super.year=(int)year; this.savedMoney=savedMoney; } public double computerInterest() { interest=super.computerInterest()+(year-(int)year)*0.12*savedMoney; //year-(int)year里面包含三位小数 return interest; } } public class main_2 { public static void main(String args[]){ ConstructionBank jsyh = new ConstructionBank(5.216,50000); System.out.printf("建设银行的利息为%f元\n",jsyh.computerInterest()); BankOfQingdao qdyh = new BankOfQingdao(5.216,50000); System.out.printf("青岛银行的利息为%f元\n",qdyh.computerInterest()); CommercialBank syyh = new CommercialBank(8.236,8000); System.out.printf("商业银行的利息为%f元",syyh.computerInterest()); } }

3.根据下面要求,编写一个Java应用程序:

用类封装手机的基本属性和功能,要求手机即可以使用移动公司的SIM卡也可以使用联通公司SIM卡(可以使用任何公司提供的SIM卡)。

①.设计抽象类:设计一个抽象类SIM,该类有三个抽象方法:giveNumber()、setNumber()和giveCorpName()

②.设计手机类:设计MobileTelephone,该类有useSIM(SIM card)方法

③.各公司手机卡类:设计SIMOfChinaMobile、SIMOfChinaUnicom类

各类之间的关系如下:

编程定义各类,并在主类中进行测试。

public class MobileTelephone { SIM card; public void useSIM(SIM card){ this.card=card; } public void showMess(){ System.out.print(card.giveCorepName()); } } public abstract class SIM{ public abstract void setNumber(String n); public abstract String giveNumber(); public abstract String giveCorepName(); } public class SIMOfChinaMobile extends SIM{ String number; public void setNumber(String n){ number=n; } public String giveNumber(){ return number; } public String giveCorepName(){ return "此卡为中国移动\n\n"; } } public class SIMOfChinaUnicom extends SIM { String number; public void setNumber(String n){ number=n; } public String giveNumber(){ return number; } public String giveCorepName(){ return "此卡为中国联通"; } } public class main_3 { public static void main(String args[]){ MobileTelephone mp = new MobileTelephone(); SIM sm = new SIMOfChinaMobile(); SIM su = new SIMOfChinaUnicom(); sm.setNumber("12345"); System.out.print("手机号为 "+sm.giveNumber()+'\n'); mp.useSIM(sm); mp.showMess(); su.setNumber("54321"); System.out.print("手机号为 "+su.giveNumber()+'\n'); mp.useSIM(su); mp.showMess(); } }

4.根据下面要求,编写Java应用程序实现:

要求有一个abstract类,类名为Employee。Employee的子类有YearWorker、MonthWorker、WeekWorker。YearWorker对象按年领取薪水,MonthWorker按月领取薪水,WeekWorker按周领取薪水。Employee类有一个abstract方法: public abstract earnings();

子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。

有一个Company类,该类用Employee对象数组作为成员,Employee对象数组的元素可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。 public abstract class Employee{ public abstract int earnings(); } public class YearWorker extends Employee{ int year; int yearSalary; YearWorker(int y,int s){ year=y; yearSalary=s; } public int earnings(){ return year*yearSalary; } } public class MonthWorker extends Employee { int month; int monthSalary; MonthWorker(int m,int s){ month=m; monthSalary=s; } public int earnings(){ return month*monthSalary; } } public class WeekWorker extends Employee{ int week; int weekSalary; WeekWorker(int w,int s){ week=w; weekSalary=s; } public int earnings(){ return week*weekSalary; } } public class Company{ Employee[] emp; Company(Employee[] e) { emp = e; } } public class main_4 { public static void main(String args[]){ int sumSalary; Employee[] employee=new Employee[3]; employee[0]=new YearWorker(1,100000); employee[1]=new MonthWorker(12,8000); employee[2]=new WeekWorker(52,1400); sumSalary=employee[0].earnings()+employee[1].earnings()+employee[2].earnings(); System.out.println("公司一年支出的总薪水为:"+sumSalary); } }

5.对于各种几何图形,一般都有求图形的面积、周长等方法。现在有圆、矩形和三角形三种图形,要求通过类来实现求三种图形的面积。

问题分析:

三种图形都有相同的方法,因此可以抽象出一个抽象类:图形类,该类有抽象的求面积方法。然后由该抽象类生成3个子类:圆类、矩形类、三角形类。在主类中实现求各类图形的面积。

各类之间的关系如下:

在子类中,定义构造方法,实现对子类成员变量的初始化。

编程定义各类,并在主类中进行测试。

public abstract class Figure{ public abstract double area(); } public class Circle extends Figure { double r; double pi=3.1415926; Circle(double r){ this.r=r; } public double area(){ return pi*r*r; } } public class Rectangle extends Figure{ double length; double width; Rectangle(double l,double w){ length=l; width=w; } public double area(){ return length*width; } } public class Triangle extends Figure{ double high; double bottom; Triangle(double h,double b){ high=h; bottom=b; } public double area(){ return 0.5*high*bottom; } } public class main_5 { public static void main(String args[]){ Circle cir=new Circle(2.0); Rectangle rec=new Rectangle(4.0,5.5); Triangle tri=new Triangle(3.0,4.0); System.out.println("圆面积为:"+cir.area()); System.out.println("矩形面积为:"+rec.area()); System.out.println("三角形面积为:"+tri.area()); } }

6.设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下:

l 编写抽象类Animal

Animal抽象类有2个抽象方法cry()和getAnimalName(),即要求各种具体的动物给出自己的叫声和种类名称。

l 编写模拟器类Simulator

该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry()方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。

l 编写Animal类的子类:Dog和Cat类

各类的UML图如下所示:

image.png

在各子类中通过构造方法实现对子类成员变量的初始化。

l 编写主类Application(用户程序)

在主类Application的main方法中至少包含如下代码。 Simulator simulator = new Simulator(); simulator.playSound(new Dog(“藏獒”)); simulator.playSound(new Cat(“加菲猫”)); public abstract class Animal{ public abstract void cry(); public abstract String getAnimalName(); } public class Dog extends Animal { String name; Dog(String n){ name=n; } public void cry(){ System.out.println("汪汪~汪汪~"); } public String getAnimalName(){ return name; } } public class Cat extends Animal{ String name; Cat(String n){ name=n; } public void cry(){ System.out.println("喵呜~喵呜~"); } public String getAnimalName(){ return name; } } public class Simulator{ public void playSound(Animal a){ a.cry(); System.out.println("你好呀,我是:"+a.getAnimalName()); } } public class main_6 { public static void main(String args[]){ Simulator simulator = new Simulator(); simulator.playSound(new Dog("藏獒")); simulator.playSound(new Cat("加菲猫")); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3