实验10:面向对象编程基础(一)简单的类和对象实验目的:1.掌握类的定义,熟悉属性、构造函数、方法的作用,掌握用类作为类型声明变量和方法返回值;2.理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性;实验数据记录及分析(或程序及运行结果)1.写一个名为Rectangle的类表示矩形。其属性包括宽width、高height和颜色color,width和height都是double型的,而color则是String类型的。要求该类具有:(1)使用构造函数完成各属性的初始赋值(2)使用getter和setter的形式完成属性的访问及修改(3)提供计算面积的getArea()方法classRectangle{privatedoubleheight;privatedoublewidth;privateStringcolor;publicdoublegetHeight(){returnheight;}publicvoidsetHeight(doubleheight){this.height=height;}publicdoublegetWidth(){returnwidth;}publicvoidsetWidth(doublewidth){this.width=width;}publicStringgetColor(){returncolor;}publicvoidsetColor(Stringcolor){this.color=color;}publicRectangle(doublewidth,doubleheight,Stringcolor){this.setColor(color);this.setHeight(height);this.setWidth(width);}publicvoidgetArea(){doublearea=0;area=this.height*this.width;System.out.println(矩形的面积为:+area);}publicStringtoString(){StringrecStr=矩形的宽度:+this.getWidth()+高度:+this.getHeight()+颜色:+this.getColor();returnrecStr;}}publicclassJavaApplication{publicstaticvoidmain(String[]args){Rectanglerec=newRectangle(5,8,蓝色);rec.getArea();System.out.println(rec.toString());}}2.一副牌Deck有52张扑克Card组成(不含王牌),每张牌有自己的牌型suit(用char类型)和点数rank(用String类型),补充完整下面的类的定义。publicclassCard{publicCard(){this.suit=suit;this.rank=rank;}publicStringtoString(){returnsuit+rank;}publicstaticvoidmain(String[]args){Cardc=newCard('红',10);System.out.println(c);}}publicclassCard{privatecharsuit;privateStringrank;publicCard(charsuit,Stringrank){this.suit=suit;this.rank=rank;}publicStringtoString(){returnsuit+rank;}publicstaticvoidmain(String[]args){Cardc=newCard('红',10);System.out.println(c);}}3.银行的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,开户日期(Date),账户密码(六位的数字,可以用0开头),当前的余额。银行规定新开一个账户时,银行方面提供一个标识符、账户初始密码123456,客户提供姓名,开户时客户可以直接存入一笔初始账户金额,不提供时初始余额为0。定义该类,并要求该类提供如下方法:存款、取款、变更密码、可以分别查询账户的标识、姓名、开户日期、当前余额等信息。importjava.util.Date;importjava.util.Scanner;publicclassBank{privateStringid;privateStringname;privateDatecreateTime;privateStringmima;privateintbalance;publicamount(Stringid,Stringname,intbalance){super();this.id=id;this.name=name;this.balance=balance;this.createTime=newDate();this.mima=123456;}publicvoiddeposit(intamount){this.balance+=amount;}publicvoidwithdraw(intamount){this.balance-=amount;}publicDategetCreateTime(){returncreateTime;}publicvoidsetCreateTime(DatecreateTime){this.createTime=createTime;}publicvoidchangemima(){Scannersc=newScanner(System.in);System.out.println(请输入新的密码:);Stringmima=sc.nextString();this.mima=newmima;}publicstaticvoidmain(String[]args){Banka=newBank(1234567890,luxi,1000);a.deposit(100);a.withdraw(150);a.changemima();a.createTime();System.out.println(账户账号:+a.getId());System.out.printf(账户姓名:+a.getName());System.out.println(账户日期:+a.getCreateTime());System.out.println(账户余额:+a.getAmount());}}4.一个Fan有自己的品牌和型号,其调速旋钮speed可以调整Fan的速度(档级在0、1、2、3范围内),通电开关可以改变电扇状态(通电表示工作就绪或者工作,断电表示停止工作)请仔细分析并提供Fan类的定义。并编写程序对其进行测试。具体要求如下:(1)表示该类对象的状态可以用品牌(brand,可以用字符串型表示,因为品牌通常都是多个字符组成的)、工作状态(status,用来反映一个电风扇是否处于通电就绪ready、正在转动working或者静止stop)、当前的速度(speed,可以用数值型表示);(2)用构造函数可以创建一个电风扇对象,指定其品牌就可以了,一个电风扇的初始状态可以是静止,而且初始速度为0,分析为什么不适宜直接通过构造函数的形式参数来指定初始状态和速度;(3)给该类提供如下的方法,重点考虑每个动作导致的状态变化,形成代码逻辑;提供一个方法来表示电风扇的开与关,模拟一个开关动作通过加速和减速两个方法来调整速度,当速度超出极限(0或3),向控制台输出一条告警信息作为提示,并且不执行该调速动作。提供一个方法能够返回电风扇当前的状态和速度(4)添加一个main方法,按顺序完成以下工作,考虑状态与速度变化和开关动作之间的关系:创建一个电风扇对象,用f表示;加速一次电风扇;向控制台输出f的状态和速度;启动电风扇(调用对象的开关方法);向控制台输出f的状态和速度;连续加速4次(考虑发生什么情况);向控制台输出f的状态和速度;连续减速4次(考虑发生什么情况);向控制台输出f的状态和速度;关掉电风扇(调用对象的开关方法);连续加速2次向控制台输出f的状态和速度;importjava.util.Scanner;publicclassFan{privateStringbrand;privateStringtype;privateintlevel;privateStringstatus;publicFan(intlevel,Stringstatus){this.brand=apple;this.type=123;this.level=level;this.status=status;}publicvoidstart(){this.level=1;this.status=on;System.out.printf(风扇已启动转速是%d\n,this.level);}publicvoidstop(intlevel,Stringstatus){this.level=level;this.status=status;System.out.printf(风扇已关闭进入待机状态\n);}publicvoidsetspeed(intlevel){this.level=level;System.out.printf(你已经设置的转速等级是%d\n,this.level);}publicvoidspeed(){System.out.printf(请设置你要的转速*1,2,3*\n);Scannerconn=newScanner(System.in);intle=conn.nextInt();switch(le){case1:this.setspeed(1);break;case2:this.setspeed(2);break;case3:this.setspeed(3);break;case0:this.stop(0,off);break;}}publicstaticvoidmain(String[]args){Fanf=newFan(1,on);Scannercon=newScanner(System.in);System.out.printf(欢迎使用%s公司的产品,你用的型号是%s\n,f.brand,f.type);while(10){System.out.printf(请输入你要设置有start,stop,speed分别有数字1,2,3替代);{intac=con.nextInt();switch(ac){case1:{f.start();break;}case2:{f.stop(0,off);break;}case3:{f.speed();break;}}}}}}5.解释下面的程序运行结果输出为什么是nullpublicclassMy{Strings;publicvoidMy(){s=Constructor;}publicvoidgo(){System.out.println(s);}publicstaticvoidmain(Stringargs[]){Mym=newMy();m.go();}}答:因为程序中s=”Constructor”;是在方法My中进行的,Main方法中并没有调用方法My,所以s的值是null。6.给出下面的类,找出后面的5个声明中,哪些是重载后的构造函数publicclassConstOver{publicConstOver(intx,inty,intz){}}A.ConstOver(){}B.ProtectedintConstOver(){}C.PrivateConstOver(intz,inty,bytex){}D.PublicObjectConstOver(intx,inty,intz){}E.PublicvoidConstOver(bytex,byte