信息科学与工程学院 《Java程序设计》 上机实验报告
专业班级 姓 名 学 号
实验时间 指导教师 成 绩
面向对象程序设计的继承、多态等特性的练习
1) 掌握类的继承机制。
2) 熟悉类中成员变量和方法的访问控制。
3) 熟悉方法或构造方法多态性。
4) 熟悉接口的定义方法。
1.编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(构造方法、修改年龄、显示基本信息)和一个构造方法。定义一组学生对象,并初始化他们的基本信息,然后依次输出。
步骤(1):定义类Person,并添加以下公共域变量
public String name; public char sex; public int age;
添加构造方法Person(String name,char sex,int age){……}
步骤(2):基于类Person派生类Student,并添加如下公共域变量和方法
public String classno; public String sno;
public void updateAge(int age){……}
void toString(){… …}
Student(String name,char sex,int age,String sno,String name)
{ super(name,sex,age);
… ….
}
步骤(3):定义一个包含main方法的Application程序类TestStudentPerson,初
始化一个学生类对象数组,并利用循环语句显示所有学生基本信息。
源程序如下:
package pk2;
class Person{
public String name;
publicchar sex;
publicint age;
Person(String name,char sex,int age){
this.name=name;
this.sex=sex;
this.age=age;
}
}
class Student extends Person{
public String classno,sno;
publicvoid updateAge(int age){
this.age=age;
}
public String toString(){
System.out.println(name+" "+sex+" "+age+" "+sno+" "+classno);
return name+" "+sex+" "+age+" "+sno+" "+classno;
}
Student(String name,char sex,int age,String sno,String classno){
super(name,sex,age);
this.sno=sno;
this.classno=classno;
}
}
publicclass TestStudentPerson {
publicstaticvoid main(String[] args)
{Student s[]=new Student[3];
s[0]=new Student("Jin",'M',20,"200904135146","电信0904");
s[0].updateAge(21);
s[1]=new Student("Liu",'M',20,"200904135147","电信0904");
s[2]=new Student("Zhu",'M',20,"200904135148","电信0904");
System.out.println("Name"+" "+"Sex"+" "+"Age"+" "+"Sno"+" "+"Classno");
for(int i=0;i<3;i++)
s[i].toString();
}
}
运行结果如下:
2.输入课本例5-4的源程序,观察其运行结果,然后将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。
步骤(1):在编辑调试工具中输入课本例5-4TestVirtualInvoke.java程序,编译运行,观察程序的运行结果,并思考为什么产生这样的结果。
步骤(2):将Shape类定义为abstact class Shape{……},然后重新定义Shape抽象类的派生类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
步骤(3):将Shape定义为interface Shape{……},然后基于Shape接口实现类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
l 方法一:
public class TestVirtualInvoke {
static void doStuff(Shape s){
s.draw();
}
public static void main(String[] args) {
Circle c=new Circle();
Triangle t=new Triangle();
Line l=new Line();
doStuff(c);
doStuff(t);
doStuff(l);
}
}
class Shape{
void draw(){
System.out.println("Shape Drawing");
}
}
class Circle extends Shape{
void draw(){
System.out.println("Shape Circle");
}
}
class Triangle extends Shape{
void draw(){
System.out.println("Shape Triangle");
}
}
class Line extends Shape{
void draw(){
System.out.println("Shape Line");
}
}
l 方法二:使用抽象类abstract
(此处略去public class TestVirtualInvoke{……} )
abstract class Shape{
abstract void draw();
}
class Circle extends Shape{
void draw(){
System.out.println("Shape Circle");
}
} //定义Shape抽象类的派生类Circle
class Triangle extends Shape{
void draw(){
System.out.println("Shape Triangle");
}
} //定义Shape抽象类的派生类Triangle
class Line extends Shape{
void draw(){
System.out.println("Shape Line");
}
} //定义Shape抽象类的派生类Line
l 方法三:使用interface接口方法
(此处略去public class TestVirtualInvoke{……} )
interface Shape{
public void draw();
} //定义一个Shape接口
class Circle implements Shape{
public void draw(){
System.out.println("Shape Circle");
}
} //基于Shape接口利用implements实现类Circle
class Triangle implements Shape{
public void draw(){
System.out.println("Shape Triangle");
}
} //基于Shape接口利用implements实现类Triangle
class Line implements Shape{
public void draw(){
System.out.println("Shape Line");
}
} //基于Shape接口利用implements实现类Line
源程序如下:
四abstractclass Worker
{ String name;
long no;
staticlongid=1000;
abstractpublicdouble getPay();
Worker(String name){ this.name=name;id=id+1;}
}
class Manager extends Worker
{
double pay=8000;
publicdouble getPay(){return 8000;}
Manager(String name)
{super(name);no=id;}
public String toString(){return "name:"+name+" no:"+no+" pay:8000"+"\n";}
}
class Sale extends Worker
{ long saleNum;
publicdouble getPay(){return saleNum*0.4;}
Sale(String name,long saleNum)
{super(name);
no=id;
this.saleNum=saleNum;
}
public String toString()
{return "name:"+name+" no:"+no+" pay:"+getPay()+"\n";}
}
class Tech extends Worker
{ long salaryHours;
public double getPay()
{return salaryHours*100; }
Tech(String name,long salaryHours)
{super(name); no=id;
this.salaryHours=salaryHours;}
public String toString() {return "name:"+name+" no:"+no+" pay:"+getPay()+"\n";}}
publicclass TestWorker
{staticdoublesum;
publicstaticvoid main(String args[])
{
Worker a[]=new Worker[4];
a[0]=new Sale("张三",2000);
a[1]=new Sale("李四",6000);
a[2]=new Tech("王五",100);
a[3]=new Manager("钱七");
// String output="";
for(int i=0;i<a.length;i++)
//output+=a[i];
System.out.println(a[i]);
for(int i=0;i<a.length;i++)
sum+=a[i].getPay();System.out.println("totalPay:"+sum);
}
}
运行结果如下:
四、个人小结
本次实验是编写三个java程序实现简单的功能,其中第二个实验要求用三种方法实现,包括使用抽象类和接口方法,实验是在java集成开发环境Myeclipse中完成的,在Myeclipse中完成java源程序的编辑、编译与运行。实验中遇到过很多问题,而Myeclipse能够较准确的指出错误并提出修改建议,在不断的修改后,终于使得所写的程序没有语法等错误,但在运行时却不能正常运行,经检查发现是创建的数组没有初始化,改正后程序正常运行出现正确的结果。
通过这次上机,我对java面向对象的程序设计的概念有了进一步的认识,深化了对课本知识的了解与认识,对类与接口的理解更深刻,熟悉了类域的使用,父类子类运以及方法的继承覆盖运用更加娴熟,也学会了一些基本的编程方法与技巧,希望经过以后的上机来更好的掌握java。
面向对象程序设计之课程设计上海电力学院课题名称院系专业学号姓名时间地点指导教师课程设计报告面向对象程序设计20xx20xx学年第一…
面向对象程序设计实验报告姓名学号班级专业学院实验三函数的应用一实验目的掌握函数的定义和调用方法练习重载函数使用练习函数模板的使用练…
题目11问题描述建立一个二维坐标系的类TwoCoor用xy表示坐标值实现两坐标点的加减运算计算两坐标点间的距离并重载输入输出运算符…
综合实验报告面向对象程序设计专业名称班级姓名学号信息科学与工程学院二零一三年七月信息科学与工程学院面向对象程序设计综合实验报告目录…
课程实验报告课程名称面向对象程序设计实验名称面向过程的整型栈编程院系计算机科学与技术专业班级学号姓名指导教师年日面向对象程序设计实…
Java项目开发实训总结设计人:浦江峰班级和班内序号:1132304112项目选题意义:在民营企业、中小型公司高速蓬勃发展的今天,…
Java项目开发实训总结设计人:杨莉莉班级和班内序号:软件11128号项目选题意义:今年来,随着网络的普及,越来越多的企业借用网络…
Java程序设计实训报告实训名称仓库管理系统实训专业计算机应用班级计算机10A1学号姓名指导教师侯丽敏20xx年12月8日实训成绩…
1Java程序设计实训报告班级学号姓名指导教师成绩2实训内容题目1用java语言设计一个关于ATM机的程序并实现相应的功能解题思路…
学生实验报告册(理工类)课程名称:JAVA程序设计实验专业班级:M11计算机科学与技术II学生学号:学生姓名:所属院部:XX学院指…
北京联合大学信息学院“面向对象程序设计”课程上机实验报告题目:JAVA上机实验心得体会姓名(学号):专业:计算机科学与技术编制时间…