1、 实 验 报 告 ( 2014 / 2015学年 第2学期) 课程名称 JAVA程序设计 实验名称 类的继承 实验时间 2015 年 4 月 30 日 指导单位 计算机学院/软件学院 软件工程系 指导教师 周莉 学生姓名 班级学号 学院(系) 计算机软件学院 专 业 计算机科学与技术 实验名称 类的继承 指导教师 周莉 实验类型 上机 实验学时 2 实验时间 2015-4-30 一、 实验目的
2、 1. 掌握类继承的概念 2. 掌握派生类的定义 3. 掌握方法的重新定义 4. 熟悉super关键词的使用 5.熟悉protected关键词的使用 二、实验环境(实验设备) 1. 每位学生配备计算机一台 2. 计算机需安装好JDK和Jcreator 三、实验内容 1. 在实验6已定义的学生类Student的基础上,以Student类为父类,为学生类派生出一个子类为大学生类(CollegeStudent)。 CollegeStudent 类在学生类上增加一个专业(profession)数据属性;方法上增加获得专业和设置专业两个方法。并对超类中的toString( )方法进
3、行重写,使得CollegeStudent类中的toString( )方法除了显示学生类的信息外,还要显示它的专业属性。 编写测试程序的主类。在主类中创建一个Student对象和CollegeStudent对象,并显示或修改这两个对象的属性值。 (1)源程序: class Student{ private String num; private String classNum; private String name; private String sex; private int age; public Student(String num,String clas
4、sNum,String name,String sex,int age){ this.num=num; this.classNum=classNum; this.name=name; this.sex=sex; this.age=age; } public String getNum(){ return num; } public String getClassNum(){ return classNum; } public String getName(){ return name; } public Strin
5、g getSex(){ return sex; } public int getAge(){ return age; } public void setNum(String num){ this.num=num; } public void setClassNum(String classNum){ this.classNum=classNum; } public void setSex(String sex){ this.sex=sex; } public void setAge(int age){ this.age
6、age; } public String toString(){ return"学号:"+this.num+"\t班号:"+this.classNum+"\t姓名:"+this.name+"\t性别:"+this.sex+"\t年龄:"+this.age; } } class CollegeStudent extends Student{ private String profession; public CollegeStudent(String num,String classNum,String name,String sex,int age,String
7、 profession){ super(num,classNum,name,sex,age); this.profession=profession; } public String getProfession(){ return profession; } public void setProfession(String pf){ profession=pf; } public String toString(){ return super.toString()+"\t专业:"+this.getProfession(); } }
8、public class StudentTest { public static void main(String args[]){ Student st=new Student("9801001","001","张三","男",20); System.out.println(st); CollegeStudent cs=new CollegeStudent("9801002","002","李四","女",18,"计算机网络"); System.out.println(cs); } } (2)实验结果: 2. 编写一个类,该类有如下一个方法:
9、
public int f(int a,int b){
…… //要求该方法返回a和b的最大公约数
}
编写一个该类的子类,要求子类重写方法f(),而且重写的方法将返回两个整数的最小公倍数。
要求:在重写的方法体中首先调用被隐藏的方法返回a和b的最大公约数m,然后将(a*b)/m返回;在应用程序的主类中分别使用父类和子类创建对象,并分别调用方法f()计算两个正整数的最大公约数和最小公倍数。
(1) 源程序:
import java.util.Scanner;
class A{
public int f(int m,int n){
if(m 10、
int temp=m;
m=n;
n=temp;
}
int r=m%n;
while(r!=0){
m=n;
n=r;
r=m%n;
}
return n;
}
}
class B extends A{
public int f(int m,int n){
int division=super.f(m,n);
return (m*n)/division;
}
}
public class sy7_1{
public static void main(String args[]) 11、{
A a=new A();
B b=new B();
Scanner reader=new Scanner(System.in);
System.out.println("输入两个整数,程序计算出他们的最大公约数和最小公倍数");
System.out.println("输入第一个整数:");
int m=reader.nextInt();
System.out.print("输入第二个整数:");
int n=reader.nextInt();
if(m*n<0)
{System.out.println("有负数,程序退出");
12、
System.exit(0);
}
System.out.printf("%d和%d的最大公约数是%d\n",m,n,a.f(m,n));
System.out.printf("%d和%d的最小公倍数是%d\n",m,n,b.f(m,n));
}
}
(2) 实验结果:
3.设计一个圆类Circle,具有属性:圆心坐标x和y及圆半径r,除具有设置及获得属性的方法外,还具有计算周长的方法perimeter( )和计算面积的方法area( ),再设计一个圆柱类Cylinder,Cylinder继承自Circle,增加了属性:高度h,增加了设置和获得h的方法、计算表面积 13、的方法area( )和计算体积的方法volume( )。创建Cylinder的类对象,显示其所有属性,计算并显示其面积和体积。
(1)源程序:
class Circle{
double x;
double y;
double r;
Circle(double x,double y,double r){
this.x=x;
this.y=y;
this.r=r;
}
public void serX(double x){
this.x=x;
}
public void serR(double r){
this.r=r;
} 14、
public double gerY(double y){
return y;
}
public double gerR(double r){
return r;
}
public double area(){
return r*r*3.1416;
}
public double perimeter(){
return 2*r*3.1416;
}
public void show(){
System.out.print("x="+x+",y="+y+",Radius="+r);
}
}
class Cylinder e 15、xtends Circle{
double h;
Cylinder(double x,double y,double r,double h){
super(x,y,r);
this.h=h;
}
public double getH(){
return h;
}
public double volume(){
return super.area()*h;
}
}
public class sy7_3{
public static void main(String args[]){
Cylinder cylinder=new Cy 16、linder(1,1,4,8);
cylinder.show();
System.out.println(".Height="+cylinder.getH());
System.out.println("Area="+cylinder.area());
System.out.println("Volume="+cylinder.volume());
}
}
(2)实验结果:
四、实验小结(包括问题和解决方法、心得体会等)
本次实验中,我们主要练习编写调试了跟累继承派生有关的程序。由于课前老师已经给出了源代码,所以我们编写起来没有什么困难。通过本次实验,我基本上掌握了类继承的概念以及派生类的定义。方法的重新定义,即覆盖原方法,调用的时候要特别注意新参数的使用。对于super关键词和protected关键词,在几道程序中分别进行了练习使用,也能较为熟悉地使用。
五、指导教师评语
成 绩
批阅人
日 期
7






