武汉科技大学 Java实验报告 实验三
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
public class TestStudentPerson {
public static void main(String[] args) {
int i;
Student card[]=new Student[3];
card[0]=new Student("刘棋","男",21,"201112135056","电信(DB)1102");
通过寻找不同对象公共属性然后建立父类并定义公共域将有区别的属相建立抽象方法然后根据对象属性的不同相应的子类将其抽象方法具体化可以使编程更加简洁程序代码也更容易让他人看懂从这方面上很好的体现了面向对象语言编程的优势
信息科学与工程学院《Java程序设计》上机实验报告
专业班级姓名学号
实验时间指导教师成绩
实验名称
实验三面向对象程序设计的继承、多态等特性的练习
实验目的
1)掌握类的继承机制。
2)熟悉类中成员变量和方法的访问控制。
3)熟悉方法或构造方法多态性。
4)熟悉接口的定义方法。
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
实验内容:
1、编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。定义一组学生对象,并初始化他们的基本信息,然后依次输出。
public static void main(String[] args){
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
}
}
interface Shape{public void draw();}
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("Draw Circle");}}
card[i].print();
}
}
程序截图:
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
2、输入课本例5-4的源程序,观察其运行结果,然后将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。
实验步骤:
步骤(1):在编辑调试工具中输入课本例5-4TestVirtualInvoke.java程序,编译运行,观察程序的运行结果,并思考为什么产生这样的结果。
Staff(String name,int num,double income){
=name;
this.num=num;
this.income=income;
}
abstract double getPay();
abstract void print();
}
class Manager extends Staff {
return income;
}
void print() {
System.out.println("Salesman→姓名:"+name+"编号:"+num+"薪水:"+getPay());
}
}
public class List {
class Line extends Shape
{void draw(){System.out.println("Draw Line");}}
(3)使用接口实现:
public class TestInterfaceInvoke {
static void doStu(包括部分实验源程序、调试结果及实验结果分析等)
class Line implements Shape
{public void draw(){System.out.println("Draw Line");}}
程序截图:
思考题:
某小型公司,主要有三类人员:经理、兼职技术人员和兼职推销员。这三类人员共痛拥有的相关属性:姓名、编号;相关方法:获取当月薪水的getPay()方法、显示个人信息的toString()方法。人员编号基数为1000,每创建一个人员实例对象,其编号属性的值顺序加1。月薪计算方法:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销人员的月薪按当月的销售额的4%提成。
添加抽象方法abstract double getPay();abstract void print();
步骤(2):分别定义Staff的子类Manager,Engineer,Salesman,让它们继承父类的属性并分别将抽象的构造方法根据各自特点将抽象方法具体化。
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
class Circle implements Shape
{public void draw(){System.out.println("Draw Circle");}}
class Triangle implements Shape
{public void draw(){System.out.println("Draw Three Lines");}}
}
}
class Engineer extends Staff {
Engineer(String name,int num,double income) {
super(name,num,income);
}
double getPay() {
income=income*100;
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
Manager(String name,int num,double income) {
super(name,num,income);
}
double getPay() {
income=8000;
return income;
}
void print() {
System.out.println("Manager→姓名:"+name+"编号:"+num+"薪水:"+getPay());
要求:根据题意,自己确定需要定义的类及各类的属性、构造方法和其他方法,并编写Java Applcation程序实现功能:存储若干个职工信息,然后分行显示所有职工的姓名、编号、月工资等相关信息,另外计算所有职工的月薪总和并显示出来。
实验步骤:
步骤(1):定义抽象类Staff作为父类,并定义通用的域变量name,num,income,添加构造方法Staff(String name,int num,double income){……}
步骤(3):定义一个包含main方法的Application程序类TestStudentPerson,初
始化一个学生类对象数组,并利用循环语句显示所有学生基本信息。
程序代码:
class Person{
publicString name;
publicString sex;
publicint age;
Person(String name,String sex,int age){
步骤(3):定义包含main方法的Application程序类List,始化三种类型员工的数据后分别利用Manager,Engineer,Salesman三种类将各自的收入计算出并输出完整信息。
程序代码:
abstract class Staff {
String name;
int num;
double income;
class Triangle extends Shape
{void draw(){System.out.println("Draw Three Lines");}}
class Line extends Shape
{void draw(){System.out.println("Draw Line");}}
publicString classno; public String sno;
publicvoid updateAge(int age){……}
voidprint(){… …}
Student(String name,char sex,int age,String sno,String name)
{ super(name,sex,age);… ….}
super(name,sex,age);
this.sno=sno;
this.classno=classno;
}
public void updateAge(int age){this.age=age;}
void print(){
System.out.println("姓名:"+name+"性别:"+sex+"年龄:"+age+"学号:"+sno+"班号:"+classno);
步骤(2):将Shape类定义为abstract class Shape{……},然后重新定义Shape抽象类的派生类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
步骤(3):将Shape定义为interface Shape{……},然后基于Shape接口实现类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
class Circle extends Shape
{void draw(){System.out.println("Draw Circle");}}
class Triangle extends Shape
{void draw(){System.out.println("Draw Three Lines");}}
card[1]=new Student("刘天鹏","男",20,"201112135058","电信(DB)1102");
card[2]=new Student("李罡","男",21,"201112135059","电信(DB)1102");
card[0].updateAge(20);
for(i=0;i<3;i++)
实验步骤:
步骤(1):定义类Person,并添加以下公共域变量
public String name; publicStringsex; public int age;
添加构造方法Person(String name,char sex,int age){……}
步骤(2):基于类Person派生类Student,并添加如下公共域变量和方法
程序代码:
(1)课本例题源代码
public class TestVirtualInvoke
{
static void doStuff(Shape s){s.draw();}
public static void main(String[] args){
Circle c = new Circle();
Triangle t = new Triangle();
=name;
this.sex=sex;
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
this.age=age;
}
}
class Student extends Person{
publicString sno;
publicString classno;
Student(String name,String sex,int age,String sno,String classno){
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
}
}
abstract class Shape{void draw(){System.out.println("Shape Drawing");}}
(2)抽象类编程代码:
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
public class TestAbstractInvoke {
static void doStuff(Shape s){s.draw();}
public static void main(String[] args){
}
public class TestStudentPerson {
public static void main(String[] args) {
int i;
Student card[]=new Student[3];
card[0]=new Student("刘棋","男",21,"201112135056","电信(DB)1102");
通过寻找不同对象公共属性然后建立父类并定义公共域将有区别的属相建立抽象方法然后根据对象属性的不同相应的子类将其抽象方法具体化可以使编程更加简洁程序代码也更容易让他人看懂从这方面上很好的体现了面向对象语言编程的优势
信息科学与工程学院《Java程序设计》上机实验报告
专业班级姓名学号
实验时间指导教师成绩
实验名称
实验三面向对象程序设计的继承、多态等特性的练习
实验目的
1)掌握类的继承机制。
2)熟悉类中成员变量和方法的访问控制。
3)熟悉方法或构造方法多态性。
4)熟悉接口的定义方法。
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
实验内容:
1、编写程序实现如下功能:已知Person类包含三个公共域变量(姓名、性别、年龄)和一个构造方法,Student类是Person类的派生类,包含两个新的公共域变量(学号、班号)、两个公共方法(修改年龄、显示基本信息)及一个构造方法。定义一组学生对象,并初始化他们的基本信息,然后依次输出。
public static void main(String[] args){
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
}
}
interface Shape{public void draw();}
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("Draw Circle");}}
card[i].print();
}
}
程序截图:
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
2、输入课本例5-4的源程序,观察其运行结果,然后将Shape类分别定义为一个抽象类和接口,然后将源程序进行修改,让其实现相同功能。
实验步骤:
步骤(1):在编辑调试工具中输入课本例5-4TestVirtualInvoke.java程序,编译运行,观察程序的运行结果,并思考为什么产生这样的结果。
Staff(String name,int num,double income){
=name;
this.num=num;
this.income=income;
}
abstract double getPay();
abstract void print();
}
class Manager extends Staff {
return income;
}
void print() {
System.out.println("Salesman→姓名:"+name+"编号:"+num+"薪水:"+getPay());
}
}
public class List {
class Line extends Shape
{void draw(){System.out.println("Draw Line");}}
(3)使用接口实现:
public class TestInterfaceInvoke {
static void doStu(包括部分实验源程序、调试结果及实验结果分析等)
class Line implements Shape
{public void draw(){System.out.println("Draw Line");}}
程序截图:
思考题:
某小型公司,主要有三类人员:经理、兼职技术人员和兼职推销员。这三类人员共痛拥有的相关属性:姓名、编号;相关方法:获取当月薪水的getPay()方法、显示个人信息的toString()方法。人员编号基数为1000,每创建一个人员实例对象,其编号属性的值顺序加1。月薪计算方法:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销人员的月薪按当月的销售额的4%提成。
添加抽象方法abstract double getPay();abstract void print();
步骤(2):分别定义Staff的子类Manager,Engineer,Salesman,让它们继承父类的属性并分别将抽象的构造方法根据各自特点将抽象方法具体化。
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
class Circle implements Shape
{public void draw(){System.out.println("Draw Circle");}}
class Triangle implements Shape
{public void draw(){System.out.println("Draw Three Lines");}}
}
}
class Engineer extends Staff {
Engineer(String name,int num,double income) {
super(name,num,income);
}
double getPay() {
income=income*100;
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
Manager(String name,int num,double income) {
super(name,num,income);
}
double getPay() {
income=8000;
return income;
}
void print() {
System.out.println("Manager→姓名:"+name+"编号:"+num+"薪水:"+getPay());
要求:根据题意,自己确定需要定义的类及各类的属性、构造方法和其他方法,并编写Java Applcation程序实现功能:存储若干个职工信息,然后分行显示所有职工的姓名、编号、月工资等相关信息,另外计算所有职工的月薪总和并显示出来。
实验步骤:
步骤(1):定义抽象类Staff作为父类,并定义通用的域变量name,num,income,添加构造方法Staff(String name,int num,double income){……}
步骤(3):定义一个包含main方法的Application程序类TestStudentPerson,初
始化一个学生类对象数组,并利用循环语句显示所有学生基本信息。
程序代码:
class Person{
publicString name;
publicString sex;
publicint age;
Person(String name,String sex,int age){
步骤(3):定义包含main方法的Application程序类List,始化三种类型员工的数据后分别利用Manager,Engineer,Salesman三种类将各自的收入计算出并输出完整信息。
程序代码:
abstract class Staff {
String name;
int num;
double income;
class Triangle extends Shape
{void draw(){System.out.println("Draw Three Lines");}}
class Line extends Shape
{void draw(){System.out.println("Draw Line");}}
publicString classno; public String sno;
publicvoid updateAge(int age){……}
voidprint(){… …}
Student(String name,char sex,int age,String sno,String name)
{ super(name,sex,age);… ….}
super(name,sex,age);
this.sno=sno;
this.classno=classno;
}
public void updateAge(int age){this.age=age;}
void print(){
System.out.println("姓名:"+name+"性别:"+sex+"年龄:"+age+"学号:"+sno+"班号:"+classno);
步骤(2):将Shape类定义为abstract class Shape{……},然后重新定义Shape抽象类的派生类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
步骤(3):将Shape定义为interface Shape{……},然后基于Shape接口实现类Circle、Triangle、Line,最后编译运行,观察程序的运行结果是否和上面的结果相同。
class Circle extends Shape
{void draw(){System.out.println("Draw Circle");}}
class Triangle extends Shape
{void draw(){System.out.println("Draw Three Lines");}}
card[1]=new Student("刘天鹏","男",20,"201112135058","电信(DB)1102");
card[2]=new Student("李罡","男",21,"201112135059","电信(DB)1102");
card[0].updateAge(20);
for(i=0;i<3;i++)
实验步骤:
步骤(1):定义类Person,并添加以下公共域变量
public String name; publicStringsex; public int age;
添加构造方法Person(String name,char sex,int age){……}
步骤(2):基于类Person派生类Student,并添加如下公共域变量和方法
程序代码:
(1)课本例题源代码
public class TestVirtualInvoke
{
static void doStuff(Shape s){s.draw();}
public static void main(String[] args){
Circle c = new Circle();
Triangle t = new Triangle();
=name;
this.sex=sex;
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
this.age=age;
}
}
class Student extends Person{
publicString sno;
publicString classno;
Student(String name,String sex,int age,String sno,String classno){
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
}
}
abstract class Shape{void draw(){System.out.println("Shape Drawing");}}
(2)抽象类编程代码:
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
public class TestAbstractInvoke {
static void doStuff(Shape s){s.draw();}
public static void main(String[] args){