JAVA实验报告(圆类,动物继承,人类继承)DOC
时间:2020-09-11 18:00:01 来源:勤学考试网 本文已影响 人
《 Java 程序设计》 实验报告
2014年 10 月17日
姓名
班
级
软工班
学
课程
Java 语言程序设
实验项目
构造方法与
指导教师
名称
计
名
称
继承
一、实验目的: 。
编写程序定义圆类 Circle ,把圆的性质和行为用代码块封装起来。圆的性质包括圆
的半径, 圆心坐标, 行为包括计算圆面积, 计算圆周长、 设置半径、 获取半径、 计算圆个数。实例化若干个圆对象,调用相应方法计算出圆面积、圆周长并计圆个数。
编程实现类的继承。编写父类 People ,子类 Student 继承自人类。人类具有姓名,性别,年龄等性质,还具有吃和说的行为。学生类继承父类,还拥有学号性质和学习行为。
构造人类和学生类的对象,调用吃、说、学习的方法输出有关信息。
使用 Java 的继承关系来描述动物世界的特征和关系。
( 1 ) 抽象出项目问题中的对象 :动物、老鼠、熊猫。
( 2 ) 抽象出每种对象所具有的性质:名字和食物。
( 3 ) 抽象出每种对象所具有的行为,动物具有吃的行为和睡觉的行为,老鼠除具有动
物行为外还具有打洞行为。
( 4 ) 抽象出继承关系,老鼠类和熊猫类作为子类继承父类动物类,子类继承父类的属
性和方法。
4.定义汽车类,其中包含所有汽车共有的属性如名字、排量、油耗、时速等,包含行为
如点火、熄火、前进、倒退、鸣笛等,然后在测试类中用定义的类来创建对象,输出该
对象的属性和行为信息。
按以下要求编写程序
创建一个正方形类,添加正方形的边作为成员变量
在正方形类中添加两种方法分别计算正方形的周长和面积
编程在测试类中输出一个正方形的周长和面积二、实验原理(可以流程图的形式出现,加以文字说明)
定义圆类 Circle.
( 1 ) 抽象出 Circle 类包含成员变量
radius 、x 和 y,它们的类型均为 double ,代表了圆
的半径和坐标属性。
成员方法 setRadius( ) 、getRadius( ) 、calcArea( )
、calcGirth( ) ,
分别实现设置半径、返回半径、计算面积、计算周长的行为。其中
setRadius(
)
方法用于给半径赋值没有返回值,类型为
void 。
calcArea( ) 、 calcGirth( )
、
getRadius( ) 方法用于计算和返回半径值,类型为double 。
( 2 ) 声明用于保存圆数量的成员变量
num ,由 Circle 类创建任意圆对象时
num 值均要
加 1 。
num 变量应该是被所有圆对象共享,
所以使用 static 关键字声明 num 为静
态变量。使用
static 声明静态方法 getNum(
) 用来返回 num 值,返回类型为 int 。
具体声明语句为:
private static int num;
public static int getNum(){return num;}
( 3 ) 使用 static final
关键字声明静态的符号常量
PI (符号常量通常定义为大写字母)
,
并给其赋值为
3.14159 ,该常量可以被所有
Cirlce 类的圆对象使用, 具体声明语句
为:
public static final double PI = 3.14159;
( 4 ) 定义两个构造方法,一个无参的构造方法和一个带参数构造方法,其中带参构造
方法对圆对象进行初始化,将参数 r 传递给圆对象的成员变量 radius ,。无参构造
方法则不初始任何变量。若需要在圆对象被创建时将圆的数量 num 增加,可以在
构造方法里对 num 变量进行增加。
( 5 ) 程序的入口方法 main ,在该方法中实例化若干个圆对象,并调用该对象的
setRadius( ) 、 getRadius( ) 、 calcArea( ) 、 calcGirth( ) 、 getNum( ) 方法来输出该
对象的半径、周长、面积属性及圆个数。
实现类的继承 .
( 1 ) 人类是学生类的父类,人类具有姓名,性别,年龄等性质,学生类是人类的子类
也具有如上性质,并且学生类还具有学号这一特性。所以人所具有的共性都封装
在人类这一父类中,学生类不但继承了人类的共性还具有自己的特有属性学号。
人类中具有了吃和说的行为,学生也继承了这些行为,并且学生还具有了学习这
一行为。 根据以上分析定义两个类 People 和 Student , People 类包括成员变量
name 、 sex 、age 属性,成员方法 eat( ) 和 speek( ) 。其中 name 、 sex 、age 属性
的访问控制符定义为 protected ,protected 修饰的成员可以被本包中的类以及其子
类继承访问。
eat( ) 、speek( ) 方法的访问控制符定义为 public ,public 修饰的方法
其访问权限最大可以被所有类访问。
( 2 ) 使用 extends 关键字实现继承,学生类继承人类共有的属性和方法,此外具有
stuNo 学号属性和 learn( ) 学习方法。
( 3 ) 父类 People 中定义的构造方法负责对 name 、sex 、age 变量初始化, 子类 Student
中定义构造方法继承父类构造并对 stuNo 属性初始化。在 Student 类的构造方法
的第一句使用 super(name, sex, age) 语句显式调用父类构造, 保证父类构造被调
用之后再调用子类构造。
( 4 ) 编写程序的入口方法 main ,在该方法中实例化人类对象和学生对象,并调用对象
的相应方法输出信息。
3. 描述动物世界的特征和关系 .
Animal
Panda Mouse
eat sleep dig
( 1 ) 动物世界的名字和食物是共有的属性,吃和睡觉是共有的行为。定义 Animal 类,
在该类中定义成员变量 name 和 food ,成员方法 eat( ) 和 sleep( ) 。根据封装性的
要求将 name 和 food 属性定义为 private 私有的,保证该属性只能被在本类内部
访问,其他类或派生类要访问该属性可以通过 public 公有的方法 setName( )、
getName( ) 、setFood( ) 、getFood( ) 进行访问,其中 setXXX( ) 方法用于给属性赋
值, getXXX( ) 方法用于返回属性。
( 2 ) 定义老鼠类 Mouse 和熊猫类 Panda ,这两类均继承自 Animal 类,继承动物类的
name 和 food 属性以及 eat( ) 和 sleep( ) 方法。
Mouse 类和 Panda 类在构造方法
中调用 setName( ) 和 setFood( ) 方法对名称和食物属性初始化。
( 3 ) 老鼠类定义打洞方法 dig( ) 输出信息。
( 4 ) 定义测试类 AnimalTest ,编写程序入口 main( ) 方法,在该方法中创建老鼠和熊猫
对象,调用相应方法输出信息。
4.汽车的属性和行为。
( 1 )建立汽车类 Car ,汽车属性:名字,排量,油耗,时速分别记作成员变量
name,pailia,oilconsume,speed. 均用 private 修饰。定义公共方法点火,熄火,前进,
倒退,鸣笛分别为 fire(),unfire(),go(),back(),whistle().
(2) 创建有参构造函数 car(String name,int pailia,int oilconsume,int speed) 初始化属性 ,
创建类事例 car 输出属性和行为。
5.求正方形周长和面积。
(1) 建立 Square 类,定义边长为 sl,用 private 修饰。创建方法 grith() 和 are() 分别求周
长和面积。
创建有参构造方法 square(int sl), 初始化边长,创建圆对象并输出周长和面积。三、实验代码
定义圆类 Circle.
public class Circle {
private double radius;// 圆的半径
private double x;// 横坐标
private double y;// 纵坐标
private static int num;// 圆的个数
private static final double PI = 3.14159;
public double getRadius() {// 返回半径
return radius;
}
public void setRadius(double radius) {// 设置半径
this.radius = radius;
}
public double calcArea() {// 计算圆面积
return PI*this.radius*this.radius;
}
public double calcGrith() {// 计算圆周长
return 2*PI*this.radius;
}
public static int getNum() {// 返回圆的个数
return num;
}
public Circle(){// 无参数构造方法
num++;
}
public Circle(double radius,double x,double y) { // 带参数构造方法
if (radius < 0) {
System.out.println(" 半径不可以为负数! ");
}
else { // 初始化圆的属性
this.radius = radius;
this.x = x;
this.y = y;
num ++;
}
}
public static void main(String[] args) {
Circle circle1 = new Circle(10,1,1);//
创建对象圆 1
Circle circle2 = new Circle(20,1,1); //
创建对象圆
2
Circle circle3 = new Circle(30,1,1); //
创建对象圆
3
System.out.print(" 圆 1 的半径: "+circle1.getRadius()+"\t");
System.out.print(" 圆 1 的面积: "+circle1.calcArea()+"\t");
System.out.println(" 圆 1 的周长: "+circle1.calcGrith());
System.out.print(" 圆 2 的半径: "+circle2.getRadius()+"\t");
System.out.print(" 圆 2 的面积: "+circle2.calcArea()+"\t");
System.out.println(" 圆 2 的周长: "+circle2.calcGrith());
System.out.print(" 圆 3 的半径: "+circle3.getRadius()+"\t");
System.out.print(" 圆 3 的面积: "+circle3.calcArea()+"\t");
System.out.println(" 圆 3 的周长: "+circle3.calcGrith());
System.out.println(" 圆的个数: "+Circle.getNum());
}
}
实现类的继承 .
class People {// 父类——人
protected String name;//
姓名
protected String sex;//
性别
protected int age;//
年龄
protected String getName() {//
return name;
返回姓名
}
protected void setName(String name) {// this.name=name;
设置姓名
}
protected String getSex() {//
return sex;
返回性别
}
protected void setSex(String sex) {// this.sex=sex;
设置性别
}
protected int getAge() {// 返回年龄
return age;
}
protected void setAge(int age) {// 设置年龄
this.age=age;
}
public static void eat() {// 吃
System.out.print(" 我在吃饭 ! ");
}
public static void speak() {// 说话
System.out.print(" 我在说话! ");
}
public People(String name, String sex, int age) {// 初始化共有属性
this.name = name;
this.sex = sex;
this.age = age;
}
}
class Student extends People {// 子类——学生
protected long stuNo;// 学号
protected long getStuNo() {// 返回学号
return stuNo;
}
protected void setStuNo(long stuNo) {// 设置学号
this.stuNo=stuNo;
}
public static void learn() {// 学习方法
System.out.println(" 我的学习方法! ");
}
public Student(String name, String sex, int age, long stuNo) {// 构造方法
super(name, sex, age);
this.stuNo = stuNo;
}
}
public class TestPeople {// 测试类
public static void main(String[] args) {
Student student = new Student(" 张一飞 "," 男",18;
System.out.print(" 姓名: "+student.getName()+" ");
System.out.print(" 性别: "+student.getSex()+" ");
System.out.print(" 年龄: "+student.getAge()+" ");
System.out.print(" 学号: "+student.getStuNo()+" ");
People.eat();// 吃
People.speak();// 说话
Student.learn();// 学习方法
}
}
3. 描述动物世界的特征和关系 .
class Animal {// 动物类
private String name;// 名字
private String food;// 食物
public String getName() {// 返回名字
return name;
}
public void setName(String name) {// 设置名字
this.name = name;
}
public String getFood() {// 返回食物
return food;
}
public void setFood(String food) {// 设置食物
this.food = food;
}
public static void Eat() {// 吃
System.out.print(" 我在吃饭 ");
}
public static void Sleep(){// 睡觉
System.out.print(" 我在睡觉 ");
}
public Animal(String name,String food){// 构造方法
this.name = name;
this.food = food;
}
}
class Mouse extends Animal {// 老鼠类
public Mouse(String name,String food) {// 构造方法
super(name,food);
}
public static void dig() {// 打洞
System.out.println(" 我在打洞 ");
}
}
class Panda extends Animal {// 熊猫类
public Panda(String name,String food) {// 构造方法
super(name,food);
}
}
public class AnimalTest {// 测试类
public static void main(String args[]){
Panda panda = new Panda(" 熊猫 "," 竹叶 ");// 实例化熊猫
System.out.print(" 名字: "+panda.getName()+"\t");
System.out.println(" 食物: "+panda.getFood()+"\t");
Panda.Eat();// 吃
Panda.Sleep();// 睡觉
System.out.println();
Mouse mouse = new Mouse(" 老鼠 "," 大米 ");// 实例化老鼠
System.out.print(" 名字: "+mouse.getName()+"\t");
System.out.print(" 食物: "+mouse.getFood()+"\t");
Mouse.Eat();// 吃
Mouse.Sleep();// 睡觉
Mouse.dig();// 打洞
}
}
4.汽车的基本属性和行为 .
public class Car {// 汽车类
private String name;// 定义名字
private int pailia;// 定义排量
private int oilconsume;// 定义油耗
private int speed;// 定义时速
public String getName() {// 返回名字
return name;
}
public void setName(String name) {// 设置名字
this.name = name;
}
public int getPailia() {// 返回排量
return pailia;
}
public void setPailia(int pailia) {// 设置排量
this.pailia = pailia;
}
public int getOilconsume() {// 返回油耗
return oilconsume;
}
public void setOilconsume(int oilconsume) {// 设置油耗
this.oilconsume = oilconsume;
}
public int getSpeed() {// 返回时速
return speed;
}
public void setSpeed(int speed) {// 设置时速
this.speed = speed;
}
public static void fire() {// 点火
System.out.print(" 点火! ");
}
public static void outfire() {// 熄火
System.out.print(" 熄火! ");
}
public static void go() {// 前进
System.out.print(" 前进! ");
}
public static void back() {// 倒退
System.out.print(" 倒退! ");
}
public static void whistle() {// 鸣笛
System.out.print(" 鸣笛! ");
}
public Car(String name,int pailia,int oilconsume,int speed) {// 构造方法
this.name = name;
this.pailia = pailia;
this.oilconsume = oilconsume;
this.speed = speed;
}
Public static void main(String args[]) {
Car car = new Car(" 宝马 ",100,50,100);// 实例化一个汽车
System.out.println(" 汽车的属性: ");
System.out.println();
System.out.print(" 汽车品牌: "+car.getName()+"\t");
System.out.print(" 排量: "+car.getPailia()+"ml"+"\t");
System.out.print(" 油耗: "+car.getOilconsume()+"ml/h"+"\t");
System.out.println(" 时速: "+car.getSpeed()+"km/h");
System.out.println();
System.out.println();
System.out.println(" 汽车的行为: ");
System.out.println();
Car.fire();// 点火
Car.outfire();// 熄火
Car.go();// 前进
Car.back();// 倒退
Car.whistle();// 鸣笛
}
}
5.求正方形的周长和面积 .
class Squre {// 定义正方形类
private int sl;// 定义边长
public int getSl() {// 返回边长
return sl;
}
public void setSl(int sl) {// 设置边长
this.sl = sl;
}
public int grith() {//
return 4*this.sl;
求周长
}
public int area() {// 求面积
return this.sl*this.sl;
}
public Squre(int sl) {// 构造方法
this.sl = sl;
}
}
public class Test {// 测试类
public static void main(String args[]) {
Squre s = new Squre(5);
System.out.print(" 正 方 形 边 长 : "+s.getSl()+"\t"+" 周 长 : "+s.grith()+"\t");
System.out.println(" 面积 :"+s.area());
}
}
四、实验过程原始记录(数据、图表、计算等)
注:此次报告没有相关数据,实验过程详见第二部分实验原理。
五、实验结果及分析,以及心得体会
1. 定义圆类 Circle.
心得体会:主要是构建 3 个对象,操作过程中,老是出现 3 个圆对象结果相同的情况,反
复上机测试才发现是成员变量中的 radius ,应该用 this.radius 才能获取到。
实现类的继承 .
心得体会:主要运用构造方法的实例化和继承知识。
3. 描述动物世界的特征和关系 .
心得体会:主要对 name 和 food 进行初始化,以及继承的使用。
4. 汽车的基本属性和行为 .
5.求正方形的周长和面积 .
总的心得体会:经过这 5 个小程序的编写,我已经能够熟练地操作程序,对构造方法和
继承方面的知识有了更深的理解,并能够编写简单的有关继承和构造方法的小程序。