JAVA语言面向对象基础实验.docx
《JAVA语言面向对象基础实验.docx》由会员分享,可在线阅读,更多相关《JAVA语言面向对象基础实验.docx(29页珍藏版)》请在冰点文库上搜索。
JAVA语言面向对象基础实验
成都大学实验报告
姓名
系别班级
学号
课程名称
指导教师
实验成绩
实验日期
软件工程6班
JAVA程序设计基础
郑加林
2011/04/25
实验项目名称JAVA语言面向对象基础
一、实验目的:
1、编写一个体现面向对象思想的程序;
2、编写一个创建对象和使用对象的方法的程序;
3、编写一个显示当前日期和时间的程序;
4、编写不同成员变量修饰方法的程序;
5、编写不同成员方法修饰方法的程序;
6、编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序;
7、编写体现类的多态性(成员方法重载、构造方法重载)的程序;
8、编写体现接口功能的程序。
二、实验内容(包括源程序及相关说明):
1、设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。
以下为源代码:
classCarinfo{
Stringname;
doublespeed;
intview;
publicCarinfo(Stringn,doubles,intv)
{
name=n;
speed=s;
view=v;
}
voidchangespeed(doubles)
{
speed=s;
System.out.println("汽车速度改变为:
"+speed+"km/h");
}
voidstop()
{
speed=0;
System.out.println("汽车已停止");
}
}
publicclassEXP3_1{
publicstaticvoidmain(String[]args){
Carinfocar=newCarinfo("Tom",40,20);
System.out.println("车主姓名:
"+car.name);
System.out.println("前的速率:
"+car.speed+"km/h");
System.out.println("方向盘的转向角度:
"+car.view+"°");
car.changespeed(60);
car.stop();
}
}
2、创建类EXP3_1的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用对象的方法来访问或修改对象的变量的值。
源代码如下
classbox{
intA;
doubleB;
publicbox(inta,doubleb)
{
A=a;
B=b;
System.out.println("A的初始值是:
"+A);
System.out.println("B的初始值是:
"+B);
}
voidchange(inta,doubleb)
{
A=a;
B=b;
System.out.println("A的当前值是:
"+A);
System.out.println("B的当前值是:
"+B);
}
}
publicclassEXP3_1{
publicstaticvoidmain(String[]args)
{
boxa=newbox(1,2.5);
a.change(2,5.5);
}
}
3、编写一个显示当前时间和日期的程序。
源代码如下
importjava.util.Calendar;
classTime{
privateCalendart;
privateinty,m,d,hh,mm,ss;
Time()
{
t=Calendar.getInstance();
y=t.get(t.YEAR);
m=t.get(t.MONTH)+1;
d=t.get(t.DATE);
hh=t.get(t.HOUR_OF_DAY);
mm=t.get(t.MINUTE);
ss=t.get(t.SECOND);
}
publicStringgetDate()
{
returny+"年"+m+"月"+d+"日";
}
publicStringgetTime()
{
returnhh+"时"+mm+"分"+ss+"秒";
}
}
publicclassexample{
publicstaticvoidmain(String[]args)
{
Timet=newTime();
System.out.println("当前日期:
"+t.getDate());
System.out.println("当前时间:
"+t.getTime());
}
}
4、使用修饰符来限定类的成员变量或成员方法的属性。
源代码如下:
classStaticDemo{
staticintx;
inty;
publicstaticintgetX(){
returnx;
}
publicstaticvoidsetX(intnewX){
x=newX;
}
publicintgetY(){
returny;
}
publicvoidsetY(intnewY){
y=newY;
}
}
publicclassEXP3_1{
publicstaticvoidmain(String[]args){
System.out.println("静态变量x="+StaticDemo.getX());
//System.out.println("实例变量y="+StaticDemo.getY());//运行时出错
StaticDemoa=newStaticDemo();
StaticDemob=newStaticDemo();
a.setX
(1);
a.setY
(2);
b.setX(3);
b.setY(4);
System.out.println("静态变量a.x="+a.getX());
System.out.println("实例变量a.y="+a.getY());
System.out.println("静态变量b.x="+b.getX());
System.out.println("实例变量b.y="+b.getY());
}
}
5、程序首先给整型变量x和y赋一个初值10,然后使用传值调用方式调用方法ff1对x和y做乘方及输出x和y的乘方值,最后再输出x和y的值。
源代码如下:
publicclassEXP3_1{
publicstaticvoidmain(String[]args)
{
intx=10,y=10;
ffl(x,y);
System.out.println("x="+x+",y="+y);
}
staticvoidffl(intpassX,intpassY){
passX=passX*passX;
passY=passY*passY;
System.out.println("passX"+passX+",passY"+passY);
}
}
6、通过调用对象的方法在方法调用后修改了成员变量的值。
源代码如下:
publicclassExp3_1{
publicstaticvoidmain(String[]args){
Powerp=newPower();
p.ff2(10,10);
System.out.println("方法调用后x="+p.x+",y="+p.y);
}
}
classPower{
intx=10,y=10;
voidff2(intpassX,intpassY){
System.out.println("初始时x="+x+",y="+y);
x=passX*passY;
y=passY*passY;
System.out.println("初始时x="+x+",y="+y);
}
}
7、创建将被继承的类。
通过EXP3_7类产生子类EXP3_8,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。
在程序中调用了父类的print方法,同时可以看出子类也具有该方法。
源代码如下:
classEXP3_7{
protectedStringxm;
protectedintxh;
voidsetdate(Stringm,inth){
xm=m;
xh=h;
}
publicvoidprint(){
System.out.println(xm+","+xh);
}
}
publicclassEXP3_8extendsEXP3_7{
protectedStringxy;
protectedStringxi;
publicstaticvoidmain(String[]args){
EXP3_7p1=newEXP3_7();
p1.setdate("李四",12321);
p1.print();
EXP3_8s1=newEXP3_8();
s1.setdate("张三",12345);
s1.xy="成都大学";
s1.xi="计算机系";
s1.print();
System.out.println(s1.xm+","+s1.xy+","+s1.xi);
}
}
8、了解成员方法的覆盖方式。
源代码如下:
classCircle{
privateintradius;
Circle(intr){
setRadius(r);
}
publicvoidsetRadius(intr){
radius=r;
}
publicintgetRadius(){
returnradius;
}
publicdoublearea(){
return3.14159*radius*radius;
}
publicStringtoString(){
return"圆半径:
"+getRadius()+"圆面积:
"+area();
}
}
publicclassEXP3_9{
publicstaticvoidmain(String[]args){
Circlec=newCircle(10);
System.out.println("\n"+c.toString());
}
}
9、说明this、super和super()的用法。
程序首先定义Point(点)类,然后创建点的子类Line(线)。
最后通过LX3_10类输出线段的长度。
程序中通过super(a,b)调用父类Point的构造方法为父类的x和y赋值。
在子类Line的setLine方法中,因为参数名和成员变量名相同,为给成员变量赋值,使用this引用,告诉编译器是为当前类的成员变量赋值。
在length和toString方法中使用父类成员变量时,使用super引用,告诉编译器使用的是父类的成员变量。
源代码如下:
classPoint{
protectedintx,y;
Point(inta,intb){
setPoint(a,b);
}
publicvoidsetPoint(inta,intb){
x=a;
y=b;
}
}
classLineextendsPoint{
protectedintx,y;
Line(inta,intb){
super(a,b);
setLine(a,b);
}
publicvoidsetLine(intx,inty)
{
this.x=x+x;
this.y=y+y;
}
publicdoublelength(){
intx1=super.x,y1=super.y,x2=this.x,y2=this.y;
returnMath.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
publicStringtoString(){
return"直线端点:
["+super.x+","+super.y+"]["+x+","+y+"]直线长度:
"+this.length();
}
}
publicclassEXP3_10{
publicstaticvoidmain(String[]args){
Lineline=newLine(50,50);
System.out.println("\n"+line.toString());
}
}
10、使用同名方法对两个、三个或用数组容纳的一组数进行排序。
源代码如下:
classIntSort{
publicStringsort(inta,intb){
if(a>b)
returna+""+b;
else
returnb+""+a;
}
publicStringsort(inta,intb,intc){
intswap;
if(a
swap=a;
a=b;
b=swap;
}
if(aswap=a;
a=c;
c=swap;
}
if(bswap=b;
b=c;
c=swap;
}
returna+""+b+""+c;
}
publicStringsort(intarr[]){
Strings="";
intswap;
for(inti=0;ifor(intj=0;jif(arr[j]>arr[j+1]){
swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
}
for(inti=0;is=s+arr[i]+"";
returns;
}
}
publicclassEXP3_11{
publicstaticvoidmain(String[]args){
IntSorts=newIntSort();
intarr[]={2,5,4,3,0};
System.out.println("两数由大到小:
"+s.sort(4,5));
System.out.println("三数由大到小:
"+s.sort(4,7,5));
System.out.println("数组由小到大:
"+s.sort(arr));
}
}
11、构造函数的重载。
源代码如下:
classRunDemo{
privateStringuserName,password;
RunDemo(){
System.out.println("全部为空!
");
}
RunDemo(Stringname){
userName=name;
}
RunDemo(Stringname,Stringpwd){
this(name);
password=pwd;
check();
}
voidcheck(){
Strings=null;
if(userName!
=null)
s="用户名:
"+userName;
else
s="用户名不能为空!
";
if(password!
="12345678")
s=s+"口令无效!
";
else
s=s+"口令:
********";
System.out.println(s);
}
}
publicclassEXP3_12{
publicstaticvoidmain(String[]args){
newRunDemo();
newRunDemo("张三");
newRunDemo(null,"李四");
newRunDemo("王五","12345678");
}
}
12、接口技术,源代码如下:
interfaceNL{
intyear=2004;
intage();
voidoutput();
}
publicclassEXP3_13implementsNL{
Stringxm;
intcsrq;
publicEXP3_13(Stringn1,inty){
xm=n1;
csrq=y;
}
publicintage(){
returnyear-csrq;
}
publicvoidoutput(){
System.out.println(this.xm+"今年的年龄是"+this.age()+"岁");
}
publicstaticvoidmain(String[]args){
NLa=newEXP3_13("张三",1990);
a.output();
}
}
三、实验结果:
实验一
实验二:
实验三:
实验四:
实验五:
实验六:
实验七:
实验八:
实验九:
实验十:
实验十一:
实验十二:
四、实验小结与建议:
1、初步了解面向对象思想;
2、了解不同成员变量修饰方法;
3、了解类的继承性(成员变量、成员方法、成员变量隐藏);
4、了解类的多态性(成员方法重载、构造方法重载);
成都大学信息科学与技术学院制