实验二 Java面向对象初步编程2.docx
- 文档编号:24082817
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:14
- 大小:68.97KB
实验二 Java面向对象初步编程2.docx
《实验二 Java面向对象初步编程2.docx》由会员分享,可在线阅读,更多相关《实验二 Java面向对象初步编程2.docx(14页珍藏版)》请在冰豆网上搜索。
实验二Java面向对象初步编程2
淮海工学院计算机工程学院
实验报告书
课程名:
《面向对象程序设计》
题目:
实验二Java面向对象初步编程
(2)
班级:
学号:
姓名:
一.实验目的
理解非访问控制符static、abstract、final及访问控制符public、protected、private、友元(缺省)的含义及在使用中的注意事项.理解修饰符在混用时需注意的问题。
二.实验内容及要求
(1)调试以下程序。
(2)通过对以下程序的调试,理解非访问控制符和访问控制符的含义及使用方法。
三.实验步骤
1.static修饰的属性,是属于整个类的,称为类属性(静态属性).
classstudent
{staticlongsno=110801;
Stringsname;
student(Stringsname)
{this.sname=sname;}
}
publicclassshiyan2_1
{publicstaticvoidmain(Stringargs[])
{
System.out.println(student.sno);//110801
studentli=newstudent("李军");
System.out.println(li.sno);//110801
li.sno++;
studentwang=newstudent("王强");
System.out.println(li.sno);//110802
System.out.println(wang.sno);//110802
System.out.println(student.sno);//110802
}
}
在studnt类中sno是静态变量,在执行完这个类之后能够保存现值,所以在执行“++”操作后sno的值在不停的增加。
2.static修饰的方法,属于整个类的,称为类方法(静态方法),不能访问非static属性,也不能调用非static的方法。
但:
非static的方法可以访问static属性和static方法。
以下程序有几处错误?
请改正!
publicclassshiyan2_2
{
staticinti1=5;
staticinti3;
inti2=10;
publicstaticvoidmain(Stringargs[])
{
i3=i1+i2;//在static中不能调用非static量
output();//在static中不能调用非static的方法
}
voidoutput()
{System.out.println("i3="+i3);
}
}
修改后的程序
publicclassshiyan2_2
{
staticinti1=5;
staticinti3;
staticinti2=10;//加入修饰符static
publicstaticvoidmain(Stringargs[])
{
i3=i1+i2;
output();
}
staticvoidoutput()//加入修饰符static
{System.out.println("i3="+i3);
}
}
3.java.lang包中的Math类中的属性和方法都是static的,所以可以用Math类名直接引用。
如:
publicclassshiyan2_3
{
publicstaticvoidmain(Stringargs[])
{
System.out.println(Math.sqrt(3));//sqrt方法是Math类中的static方法
System.out.println(Math.round(4.78));//round方法是Math类中的static方法
System.out.println(Math.log(3));//log方法是Math类中的static方法
}
}
4.用final修饰的类是最终类,不能有子类。
以下程序正确吗?
若不正确,指出错误之处和错误原因,并请改正!
!
finalclassclass1
{
finalvoidmethod1()
{System.out.println("final类中的方法默认是final方法");}
finalvoidmethod2()
{System.out.println("final方法不能被子类改写!
");}
}
classclass2extendsclass1//无法从最终class1进行继承
{
publicvoidmethod3()
{System.out.println("class1类中新定义的方法!
");
System.out.println("class1类中现在共有3个方法.method1,2,3");
}
}
publicclassshiyan2_4
{publicstaticvoidmain(Stringargs[])
{class1cs1=newclass1();
cs1.method1();
cs1.method2();
class2cs2=newclass2();
cs2.method1();//class2不能继承class1,所以cs2不用调用class1中的方法。
cs2.method2();//class2不能继承class1,所以cs2不用调用class1中的方法。
cs2.method3();
}
}
修改后的程序:
finalclassclass1
{
finalvoidmethod1()
{System.out.println("final类中的方法默认是final方法");}
finalvoidmethod2()
{System.out.println("final方法不能被子类改写!
");}
}
classclass2
{
publicvoidmethod3()
{
System.out.println("class1类中新定义的方法!
");
System.out.println("class1类中现在共有3个方法.method1,2,3");
}
}
publicclassshiyan2_4
{publicstaticvoidmain(Stringargs[])
{class1cs1=newclass1();
cs1.method1();
cs1.method2();
class2cs2=newclass2();
cs2.method3();
}
}
5.final修饰的属性是常量,定义时要同时赋初值,并且不能在语句中再修改其值。
以下程序正确吗?
若不正确,指出错误之处和错误原因,并请改正!
!
classclass1
{
finalinti1=5;
voidmethod1(){i1++;}//i是最终常量,值不能被改变
}
publicclassshiyan2_5
{
publicstaticvoidmain(Stringargs[])
{class1cs1=newclass1();
cs1.method1();
System.out.println(cs1.i1);
}
}
修改后的程序:
classclass1
{
finalinti1=5;
voidmethod1(){System.out.println(i1+1);}//修改处
}
publicclassshiyan2_5
{
publicstaticvoidmain(Stringargs[])
{class1cs1=newclass1();
cs1.method1();
System.out.println(cs1.i1);
}
}
6.抽象方法只能有方法头,没有方法体,且只出现在抽象类中。
如果一个类中包含有抽象方法,则这个类必须是抽象类,抽象类一般都有子类,不能用new运算符实例化抽象类。
请改正以下程序中的错误!
abstractclassclass1
{
abstractvoidmethod1();//抽象方法
}
classclass2extendsclass1
{
voidmethod1()
{System.out.println("子类重新定义,已经不是抽象方法!
");}
voidmethod2()
{System.out.println("子类自己定义的方法,不是抽象方法!
");}
}
publicclassshiyan2_6
{
publicstaticvoidmain(Stringargs[])
{class1cs1=newclass1();//抽象类不能实例化
class1cs2=newclass2();
cs2.method1();
}
}
修改后的程序:
abstractclassclass1
{
abstractvoidmethod1();//抽象方法
}
classclass2extendsclass1
{
voidmethod1()
{System.out.println("子类重新定义,已经不是抽象方法!
");}
voidmethod2()
{System.out.println("子类自己定义的方法,不是抽象方法!
");}
}
publicclassshiyan2_6
{
publicstaticvoidmain(Stringargs[])
{
class1cs2=newclass2();
cs2.method1();
class2cs3=newclass2();
cs3.method2();//class2自己定义的方法,不是抽象方法。
}
}
7.private修饰的属性是私有属性,只能被该类自身所访问,其他类都不能直接访问(可以间接访问!
)
请改正以下程序中的错误!
classclass1
{
privateinti;
}
publicclassshiyan2_7
{publicstaticvoidmain(Stringargs[])
{class1cs1=newclass1();
cs1.i=5;//i是私有的,外类不能直接对其操作
System.out.println(cs1.i);//i是私有的,外类不能直接对其操作
}
}
修改后的程序:
classclass1
{
privateinti;
intm()
{returni=5;}
}
publicclassshiyan2_7
{publicstaticvoidmain(Stringargs[])
{class1cs1=newclass1();
cs1.m();//利用class1中的方法对i进行访问
System.out.println(cs1.m());//利用class1中的方法对i进行访问
}
}
8.关于构造函数的使用问题。
(1)同一个类可以定义多个构造函数,且它们之间可以相互调用(用this(….))。
(2)若一个类没有定义构造函数呢?
(3)把一个类实例化为对象时,先调用父类的无参构造函数,然后再调用子类相应的构造函数。
请调试以下程序。
classxuesheng
{
Stringsno,sname,sex,sclass;
xuesheng()
{System.out.println("*********在父类中!
!
*********");}
}
classdaxueshengextendsxuesheng
{
Stringsdept,majority;
daxuesheng(Stringsno,Stringsname,Stringsex,Stringsclass,Stringsdept,Stringmajority)
{this.sno=sno;
this.sname=sname;
this.sex=sex;
this.sclass=sclass;
this.sdept=sdept;
this.majority=majority;
System.out.println("*********在子类中!
!
*********");
System.out.println("学号:
"+sno);
System.out.println("姓名:
"+sname);
System.out.println("性别:
"+sex);
System.out.println("班级:
"+sclass);
System.out.println("系别:
"+sdept);
System.out.println("专业:
"+majority);
}
}
publicclassshiyan2_8
{
publicstaticvoidmain(Stringargs[])
{
daxueshengli=newdaxuesheng("1108003","小李","男","网络081","计算机工程学院","网络工程");
}
}
在这个程序中先调用了父类xuesheng中的构造函数,然后调用了子类daxuesheng中的的构造函数,在子类的构造函数中,继承和使用了父类中的四个量。
若一个类中没有构造函数,系统会调用默认的构造方法(默认的构造方法是无参的)。
四.实验结果及分析体会
一个类中可以有多个方法具有相同的名字,但是这些方法的参数必须不同,或者参数的类型不同,方法的参数在整个方法内有效,方法类型前面不加关键字static的是实例方法,加关键字static的是类方法。
This是Java的一个关键字,表示某个对象。
它可以出现在实例方法和构造方法中,但是不可以出现在类方法中。
This关键字出现在类的构造方法中时,代表使用应该构造方法所创建的对象。
实例方法必须通过对象来调用,当this关键字出现在类的实例方法中时,代表正在调用该当前对象。
在编译程序时系统自动引入java.lang包中的所有的类,java.lang是Java的核心类库,它包含了运行Java程序必不可少的系统类。
所在在上面的第三个例子中能直接用Math中的方法。
类中的某个成员是私有类变量,寻么在另外一个类中,也不能通过类名来直接操作私有的类变量。
要通过所在类的成员方法来进行调用,间接使用。
在Java中不支持多重继承,子类只能有一个父类。
Final修饰参数值不能改变,修饰方法不能重定。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验二 Java面向对象初步编程2 实验 Java 面向 对象 初步 编程