类的设计与封装实验报告.docx

上传人:b****8 文档编号:28475198 上传时间:2023-07-14 格式:DOCX 页数:13 大小:77.06KB
下载 相关 举报
类的设计与封装实验报告.docx_第1页
第1页 / 共13页
类的设计与封装实验报告.docx_第2页
第2页 / 共13页
类的设计与封装实验报告.docx_第3页
第3页 / 共13页
类的设计与封装实验报告.docx_第4页
第4页 / 共13页
类的设计与封装实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

类的设计与封装实验报告.docx

《类的设计与封装实验报告.docx》由会员分享,可在线阅读,更多相关《类的设计与封装实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

类的设计与封装实验报告.docx

类的设计与封装实验报告

浙江大学城市学院实验报告

课程名称面向对象程序设计

实验项目名称类的设计与封装实验

(一)

学生姓名高宁雯专业班级计算1005学号31001221

一.实验目的和要求

1.掌握使用类将对象的属性与功能封装在类中的特点

2.掌握实例方法与构造方法

二.实验内容

1.分析Time类的设计

2.分析并设计Product类

3.分析并设计Fraction类

4.设计Rectangle类

5.设计Student类及其测试类School类

三.实验结果与分析(可将程序运行结果截屏,也可分析运行结果)

1.阅读以下关于Time类的代码,分析程序并回答相关的问题

importjava.text.DecimalFormat;

publicclassTime{

privateinthour;

privateintminute;

privateintsecond;

Time(){hour=0;minute=0;second=0;}

Time(inth){hour=h;minute=0;second=0;}

Time(inth,intm){hour=h;minute=m;second=0;}

Time(inth,intm,ints){hour=h;minute=m;second=s;}

Time(Timetime){

this.hour=time.getHour();

this.minute=time.getMinute();

this.second=time.getSecond();

}

publicintgetHour(){returnhour;}

publicintgetMinute(){returnminute;}

publicintgetSecond(){returnsecond;}

publicStringtoUniversalString(){

DecimalFormattwoDigits=newDecimalFormat("00");

returntwoDigits.format(getHour())+":

"+

twoDigits.format(getMinute())+":

"+

twoDigits.format(getSecond());

}

publicStringtoStandardString(){

DecimalFormattwoDigits=newDecimalFormat("00");

return((getHour()==12||getHour()==0)?

12:

getHour()%12)+":

"+、twoDigits.format(getMinute())+":

"+twoDigits.format(getSecond())+(getHour()<12?

"AM":

"PM");

}

}

(1)Time类共有几个构造器(即构造方法),作用有什么不同?

5种

Time(){hour=0;minute=0;second=0;}

无参数构造,初始化hour,minute,second;

Time(inth){hour=h;minute=0;second=0;}

定义参数h,将其赋值给hour;

Time(inth,intm){hour=h;minute=m;second=0;}

定义参数h和m,将其赋值给hour,minute;

Time(inth,intm,ints){hour=h;minute=m;second=s;}

定义参数h,m和s,将其赋值给hour,minute,second;

(2)getTime(),getMinute(),getSecond()方法的作用是什么?

如果去掉这些方法,程序可以完成同样的功能吗?

如何修改?

以实例的方法,在Time(Timetime)为hour,minute,second赋值,

去掉后改为Time(Timetime){

this.hour=hour;

this.minute=minute;

this.second=second;

}

(3)如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?

Timet1=newTime(5);

System.out.println("Thetimeis"+t1.toStandardString());

输出“The time is 4AM”

(4)如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?

Timet2=newTime(13,59,60);

System.out.println("Thetimeis"+t2.toStandardString());

输出“The time is 1:

59:

60PM”

(5)如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?

Timet3=newTime(13,30,0);

Timet4=newTime(t3);

System.out.println("Thetimeis"+t4.toUniversalString());

“The time is 1:

30:

00PM”

2.确定以下代码段中是否存在错误,如果有错误,指出是逻辑错误还是语法错误,请在程序中用“~~~~~”标出错误的地方,并在第个练习的空白处写下正确的代码。

如果代码中没有错误,则在答案中写上“没有错误”。

注意:

在每个程序段中可能包含多处错误。

(1)以下代码定义了Product类,它有一个不带参数的构造器,将产品的名称设置为一个空的String,将price设置为0.00;该类还有一个toProductString方法,它返回一个包含产品的name和price的String

importjava.text.*;

publicclassProduct{

privateStringname;

privatedoubleprice;

privatestaticDecimalFormatmoney=newDecimalFormat("$0.00");

publicProduct(){

name="";

price=0.00;

}

publicStringtoProductString(){

returnname+"costs"+money.format(price);

}

}//endclassProduct

答案:

没有错误。

(2)如下代码定义了Product类的另一个构造器,它有2个参数,并将这些参数赋给相应的实例变量

publicProduct(Stringname,doubleprice){

name=name;

price=price;

}

答案:

this.name=name;

this.price=price;

(3)如下代码定义了两个set方法,用于设置Product类的name和price

publicsetName(){

this.name=name;

}

publicsetPrice(){

this.price=price;

}

答案:

publicStringsetName(){

returnname;

}

publicdoublesetPrice(){

returnprice;

}

(4)如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,并显示一个包含对象的实例变量值的String

Productp1=newProduct("Milk",5.5);

System.out.println(p1.name+""+p1.price);

(5)如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,设置其实例变量的值,并显示一个包含实例变量值的String

Productp1=newProduct();

p1.setName();

p1.setPrice();

System.out.println(p1.toProductString("Eggs",3));

答案:

3.补充以下代码,完成对一个分数类Fraction的定义,并测试这个类

publicclassFraction{

privateintnume;//分子

privateintdeno;//分母

//无参构造器

publicFraction(){

this.nume=0;

this.deno=1;

//初始化实例变量

}

//有参构造器

publicFraction(intn,intd){

//初始化实例变量

}

//化简分数方法

voidFracSimp()

{

//求分数的分子和分母的最大公约数

//化简分数

}

/*欧几里德算法定理:

gcd(a,b)=gcd(b,amodb),以下是c语言的代码,可以参考

 voids&a,int&b)   {  intc=a;       a=b;       b=c;   }

   intgcd(inta,intb)   {

       if(0==a)       {           returnb;       }

       if(0==b)       {           returna;       }

       if(a>b)       {           s);       }

       intc;

       for(c=a%b;c>0 ;c=a%b)       {           a=b;           b=c;       }

       returnb;

   }*/

//分数输出方法

voidFracOutput(){

}

publicstaticvoidmain(Stringargs[]){

}

4.构造一个Rectangle类(矩形类),它有两个浮点型属性length(长)和width(宽)。

该类具有两个构造函数(无参和有参),perimeter()和area()方法分别返回矩形的周长和面积,编写相应的main方法测试Rectangle类。

程序结构如下:

publicclassRectangel{

//实例变量的声明

//构造器的定义

//perimeter方法定义

//area方法定义

publicstaticvoidmain(String[]args){

//定义Rectangle类的对象引用r

//调用perimeter方法,并显示周长

//调用area方法,并显示面积

}

}

5.设计一个学生类Student,程序框架如下:

publicclassStudent{

//设计一个类变量(静态变量)记录学生人数

private

//设计基本属性有“学号”、“班号”、“姓名”、“性别”、“年龄”、“成绩”(用数组表示6门课的成绩)

private

//设计构造器,传递学生的个人信息

publicStudent(){

}

//设计方法“获得学号”、“获得班号”、“获得姓名”、“获得成绩”

 

//设计方法“修改年龄”、“修改班号”

 

//设计类方法“获得学生人数”

}

//设计一个类School,用于测试以上Student类

publicclassSchool{

publicstaticvoidmain(String[]args){

//创建新学生对象

//输出学生的基本信息

//测试类变量值的变化

}

}

classStudent{

//设计一个类变量(静态变量)记录学生人数

privatestaticintcount=0;

//设计基本属性有“学号”、“班号”、“姓名”、“性别”、“年龄”、“成绩”(用数组表示6门课的成绩)

privateintnum;

privateintclass_num;

privateStringname;

privateStringsex;

privateintage;

privateintscore[]=newint[6];

//设计构造器,传递学生的个人信息

publicStudent(){

}

publicStudent(intnum,intclass_num,Stringname,Stringsex,intage,int[]score){

this.num=num;

this.class_num=class_num;

this.name=name;

this.sex=sex;

this.age=age;

this.score=score;

}

//设计方法“获得学号”、“获得班号”、“获得姓名”、“获得成绩”

publicintnum(){

returnnum;

}

publicintgetClass_num(){

returnclass_num;

}

publicStringgetName(){

returnname;

}

publicint[]getScore(){

returnscore;

}

//设计方法“修改年龄”、“修改班号”

publicvoidsetAge(intage){

this.age=age;

}

publicvoidsetClass_num(intclass_num){

this.class_num=class_num;

}

//设计类方法“获得学生人数”

}

//设计一个类School,用于测试以上Student类

publicclassSchool{

publicstaticvoidmain(String[]args){

inta[]={91,92,93,94,95,96};

//创建新学生对象

Students=newStudent(3,3,"abc","F",2,a);

//输出学生的基本信息

intm[]=s.getScore();

System.out.println("班级为:

"+s.getClass_num()+"\n姓名为:

"+s.getName());

System.out.println("学生成绩为:

");

inti;

for(i=0;i

System.out.println(m[i]);

}

//测试类变量值的变化

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1