资源描述
实 验 报 告
( 2014 / 2015学年 第2学期)
课程名称
JAVA程序设计
实验名称
类的继承
实验时间
2015
年
4
月
30
日
指导单位
计算机学院/软件学院
软件工程系
指导教师
周莉
学生姓名
班级学号
学院(系)
计算机软件学院
专 业
计算机科学与技术
实验名称
类的继承
指导教师
周莉
实验类型
上机
实验学时
2
实验时间
2015-4-30
一、 实验目的
1. 掌握类继承的概念
2. 掌握派生类的定义
3. 掌握方法的重新定义
4. 熟悉super关键词的使用
5.熟悉protected关键词的使用
二、实验环境(实验设备)
1. 每位学生配备计算机一台
2. 计算机需安装好JDK和Jcreator
三、实验内容
1. 在实验6已定义的学生类Student的基础上,以Student类为父类,为学生类派生出一个子类为大学生类(CollegeStudent)。
CollegeStudent 类在学生类上增加一个专业(profession)数据属性;方法上增加获得专业和设置专业两个方法。并对超类中的toString( )方法进行重写,使得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 classNum,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 String 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=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 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();
}
}
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. 编写一个类,该类有如下一个方法:
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<n){
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[]){
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("有负数,程序退出");
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的方法、计算表面积的方法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;
}
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 extends 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 Cylinder(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
展开阅读全文