实验四 Java语言面向对象基础编程.docx
《实验四 Java语言面向对象基础编程.docx》由会员分享,可在线阅读,更多相关《实验四 Java语言面向对象基础编程.docx(20页珍藏版)》请在冰豆网上搜索。
实验四Java语言面向对象基础编程
实验项目编号
实验项目名称
Java语言面向对象基础编程
实验学时
实验日期
成绩
实验地点
指导老师
实验四Java语言面向对象基础编程
一、实验目的
1.理解Java语言是如何体现面向对象编程基本思想,
2.了解类的封装方法,以及如何创建类和对象,
3.了解成员变量和成员方法的特性。
二、实验内容
1.类的定义、封装和对象创建的使用。
编写一个Java应用程序,该程序中有3个类:
Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。
具体要求如下:
(1)Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边的功能。
另外,Trangle类还具有一个boolean型的属性,该属性用来判断三个属能否构成一个三角形。
(2)Lader类具有类型double的上底、下底、高、面积属性,具有求面积的功能。
(3)Circle类具有类型为double的半径、周长和面积属性,具有求周长、面积的功能。
packageexercise;
classTrangle{
doublesideA,sideB,sideC,area,length;
booleanboo;
//带三个参数的构造函数
publicTrangle(doublea,doubleb,doublec){
sideA=a;//参数a,b,c分别赋值给sideA,sideB,sideC
sideB=b;
sideC=c;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){//a,b,c构成三角形的条件表达式
boo=true;//给boo赋值。
}else{
boo=false;//给boo赋值。
}
}
doublegetLength(){
returnsideA+sideB+sideC;//方法体,要求计算出length的值并返回
}
//计算三角形的面积
publicdoublegetArea(){
if(boo){
doublep=(sideA+sideB+sideC)/2.0;
area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
returnarea;
}else{
System.out.println("不是一个三角形,不能计算面积");
return0;
}
}
publicvoidsetABC(doublea,doubleb,doublec){
sideA=a;//参数a,b,c分别赋值给sideA,sideB,sideC
sideB=b;
sideC=c;
if(sideA+sideB>sideC&&sideA+sideC>sideB&&sideB+sideC>sideA){//a,b,c构成三角形的条件表达式
boo=true;//给boo赋值。
}else{
boo=false;//给boo赋值。
}
}
}
//定义一个梯形类
classLader{
doubleabove,bottom,height,area;
Lader(doublea,doubleb,doubleh){
above=a;//方法体,将参数a,b,c分别赋值给above,bottom,height
bottom=b;
height=h;
}
doublegetArea(){
return(above+bottom)*height/2.0;//方法体,,要求计算出area返回
}
}
//定义一个圆类
classCircle{
doubleradius,area;
Circle(doubler){
radius=r;//方法体
}
doublegetArea(){
returnMath.PI*Math.pow(radius,2);//方法体,要求计算出area返回
}
doublegetLength(){
return2*Math.PI*radius;//getArea方法体的代码,要求计算出length返回
}
voidsetRadius(doublenewRadius){
radius=newRadius;
}
doublegetRadius(){
returnradius;
}
}
publicclassshiyan4_1{
publicstaticvoidmain(Stringargs[]){
doublelength,area;
Circlecircle=null;
Trangletrangle;
Laderlader;
circle=newCircle(3);//创建对象circle
trangle=newTrangle(6,5,2);//创建对象trangle。
lader=newLader(8,9,6);//创建对象lader
length=circle.getLength();//circle调用方法返回周长并赋值给length
System.out.println("圆的周长:
"+length);
area=circle.getArea();//circle调用方法返回面积并赋值给area
System.out.println("圆的面积:
"+area);
length=trangle.getLength();//trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:
"+length);
area=trangle.getArea();//trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:
"+area);
area=lader.getArea();//lader调用方法返回面积并赋值给area
System.out.println("梯形的面积:
"+area);
trangle=newTrangle(12,34,1);//trangle调用方法设置三个边,要求将三个边修改为12,34,1。
area=trangle.getArea();//trangle调用方法返回面积并赋值给area
System.out.println("三角形的面积:
"+area);
length=trangle.getLength();//trangle调用方法返回周长并赋值给length
System.out.println("三角形的周长:
"+length);
}
}
2.实例成员与类成员的使用。
按程序模板的要求编写源文件,要特别注意程序的输出结果,并能正确解释输出的结果。
packageexercise;
classA{
floata;
staticfloatb;
voidsetA(floatA){
a=A;
}
voidsetB(floatB){
b=B;
}
floatgetA(){
returna;
}
floatgetB(){
returnb;
}
voidoutputA(){
System.out.println(a);
}
staticvoidoutputB(){
System.out.println(b);
}
}
publicclassshiyan4_2{
@SuppressWarnings("static-access")
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
A.b=100;
A.outputB();
Acat=newA();
Adog=newA();
cat.setA(200);
cat.setB(400);
dog.setA(150);
dog.setB(300);
cat.outputA();
cat.outputB();
dog.outputA();
dog.outputB();
}
}
3.方法中参数传递的练习
在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。
在Java中,方法中的参数传递可以分为传值调用或对象方法调用等方式。
传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。
对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。
所以,如果不想改变参数的值,可以采用传值调用的方法。
如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。
(1)编写一个传值调用的程序文件SY3_3.java。
程序功能:
程序首先给整型变量x和y赋一个初值10,然后使用传值调用方式调用方法ff1对x和y做乘方及输出x和y的乘方值,最后再输出x和y的乘方值。
packageexercise;
publicclassshiyan4_3{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
intx=10,y=10;
swap(x,y);
System.out.println("x="+x+",y="+y);
}
staticvoidswap(intpassX,intpassY){
passX=passX*passX;
passY=passY*passY;
System.out.println("passX="+passX+",passY="+passY);
}
}
(2)编写一个调用对象方法的程序文件SY3_4.java。
packageexercise;
publicclassshiyan4_4{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Powerp=newPower();
p.swap(p.x,p.y);
System.out.println("方法调用后x="+p.x+",y="+p.y);
}
}
classPower{
intx=10,y=10;
voidswap(intpassX,intpassY){
System.out.println("初始时x="+x+",y="+y);
x=passX*passX;
y=passY*passY;
System.out.println("方法调用中x="+x+",y="+y);
}
}
4.定义一个名为MyRectangle的矩形类,类中有4个私有的整型域,分别是矩形的左上角坐标(xUp,yUp)和右下角坐标(xDown,yDown);类中定义没有参数的构造方法和有4个int参数的构造方法,用来初始化类对象。
类中还有以下方法:
getW()——计算矩形的宽度;getH()——计算矩形的高度;area()——计算矩形的面积;toString()——把矩形的宽、高和面积等信息作为为字符串返回。
编写应用程序使用MyRectangle类。
packageexercise;
classMyRectangle
{
privateintxUp,yUp;
privateintxDown,yDown;
publicMyRectangle(){
xUp=yUp=xDown=yDown=0;
}
publicMyRectangle(intxu,intyu,intxd,intyd){
xUp=xu;
yUp=yu;
xDown=xd;
yDown=yd;
}
publicintgetW(){
returnMath.abs(xUp-xDown);
}
publicintgetH(){
returnMath.abs(yUp-yDown);
}
publicintarea(){
returnthis.getW()*this.getH();
}
publicStringtoString(){
StringtempStr="width="+this.getW()+"height="+this.getH()+"area="+this.area();
returntempStr;
}
}
publicclassshiyan4_5{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
MyRectangletempRec1=newMyRectangle();
MyRectangletempRec2=newMyRectangle(-1,5,4,7);
System.out.println("Thisfirstrectangleinformation"+tempRec1.toString());
System.out.println("Thissecondrectangleinformation"+tempRec2.toString());
}
}
5.请定义一个名为Card的扑克牌类,该类有两个private访问权限的字符串变量face和suit:
face描述一张牌的牌面值(如:
"Ace","Deuce","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Jack","Queen","King");suit描述一张牌的花色(如:
"Hearts","Diamonds","Clubs","Spades")。
定义Card类中的public访问权限的构造方法,为类中的变量赋值;定义protected访问权限的方法getFace(),得到扑克牌的牌面值;定义protected访问权限的方法getSuit(),得到扑克牌的花色;定义方法toString(),返回表示扑克牌的花色和牌面值字符串(如“AceofHearts”、“TenofClubs”等)。
packageexercise;
classCard
{
privateStringface;
privateStringsuit;
publicCard(Stringf,Strings){
face=f;
suit=s;
}
protectedStringgetFace(){
returnface;
}
protectedStringgetSuit(){
returnsuit;
}
publicStringtoString(){
returnface+"of"+suit;
}
}
publicclassshiyan4_6{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Cardcard1=newCard("Ace","Hearts");
Cardcard2=newCard("Ten","Clubs");
System.out.println(card1.toString());
System.out.println(card2.toString());
}
}
6.设计一个Worker类,其成员变量有:
身份证号、姓名、性别、年龄、入职时间、工资/月、奖金/月、加班费/月、电话费/月、生活费/月、交通费/月、房租/月;用构造方法进行初始化;其他成员方法:
输出工人信息的方法(包括输出净收入),当某个信息没有被赋值(初始化)时,输出信息为“未知”;计算总收入的方法,总收入中要考虑扣除国家现行的个人所得税法规定的税金;计算总支出的方法。
packageexercise;
classWorker
{
privateStringnumber;
privateStringname;
privateStringsex;
privateintage;
privateStringentry;
privatedoublesalary;
privatedoublebonus;
privatedoubleovertimeMoney;
privatedoublephoneMoney;
privatedoubleliveMoney;
privatedoubletrafficMoney;
privatedoublerent;
publicWorker()
{
number=name=sex=entry="";
age=0;
salary=bonus=overtimeMoney=phoneMoney=liveMoney=trafficMoney=rent=0;
}
publicWorker(Stringnum,Stringnam,Stringse,intag,Stringent,doublesal,doublebon,doubleove,doublepho,doubleliv,doubletra,doubleren)
{
number=num;
name=nam;
sex=se;
age=ag;
entry=ent;
salary=sal;
bonus=bon;
overtimeMoney=ove;
phoneMoney=pho;
liveMoney=liv;
trafficMoney=tra;
rent=ren;
}
publicvoidshowInfo(){
if(number.equals("")){
System.out.println("δ֪");
}else{
System.out.println(number+"memberinfomationlist:
");
System.out.println(name);
System.out.println(sex);
System.out.println(age);
System.out.println(entry);
doublemoney=salary+bonus+overtimeMoney-phoneMoney-liveMoney-trafficMoney-rent;
System.out.println(money);
}
}
}
publicclassshiyan4_7
{
publicstaticvoidmain(String[]args)
{
Workerworker1=newWorker();
Workerworker2=newWorker("0715646","leafspace","women",22,"20160901",5000,500,1200,50,800,150,1500);
worker1.showInfo();
worker2.showInfo();
}
}
7.设计一个汽车Car类,其成员变量有:
商标、型号、系列、箱式(三厢、两厢)、颜色、出厂日期、门数、排量、价格、可优惠价、百公里耗油量、最高时速、最大功率、最大扭矩、加速时间、刹车距离;用构造方法进行初始化;其他成员方法:
输出汽车信息的方法,当某个信息没有被赋值(初始化)时,输出信息为“未知”;计算行驶一定距离总耗油量,以及给定油价计算燃油费用的方法。
packageexercise;
classCar
{
privateStringlogo;
privateStringmodel;
privateStringseries;
privateStringboxN;
privateStringcolor;
privateStringoutDate;
privateintdoorN;
privatelongoutN;
privatedoubleprice;
privatedoublesellprice;
privatedoubleoil;
privateintspeed;
privatedoublemaxpower;
privatedoublemaxspace;
privatedoubletime;
privatedoubletspace;
publicCar(Stringlog,Stringmod,Stringser,Stringbox,Stringcol,Stringoutd,
intdoorn,longoutn,doublepri,doublesell,doubleoi,intspe,doublemaxpo,doublemaxsp,doubletim,doubletsp){
logo=log;
model=mod;
series=ser;
boxN=box;
color=col;
outDate=outd;
doorN=doorn;
outN=outn;
price=pri;
sellprice=sell;
oil=oi;
speed=spe;
maxpower=maxpo;
maxspace=maxsp;
time=tim;
tspace=tsp;
}
publicvoidshowInfo(){
System.ou