java程序设计课程--实验报告-实验13

更新时间:2023-07-01 10:20:13 阅读: 评论:0

《Java开发技术》实验报告
实验序号:实验13                        实验项目名称:继承
东莞翻译公司
学  号
姓  名
专业、班
take my breath away实验地点
实1-316
指导教师
实验时间
2012-12 -5
一、实验目的及要求
理解继承的基本概念
理解继承与可见性
掌握继承的设计
二、实验设备(环境)及要求
PC机,windows xp,软件环境(jdk1.6,tomcat web服务器,Eclip)
硬件要求:CPU PII 以上,64M 内存,100M 硬盘空间。
软件要求:WindowsXP,IE 5 以上。
开发环境:JDK1.6.0_10
三、实验内容与步骤
修改类继承中的错误
文件Dog.java声明了一个Dog类,文件Labrador.java和Yorkshire.java是两个继承自Dog的类,文件DogTest.java是一个简单的驱动程序。将文件保存至本地磁盘并仔细阅读。按照以下步骤对上述程序进行修改:
1. 在DogTest.java文件中添加语句,要求在创建和打印Dog对象之后,还要创建和打印Yorkshire和Labrador对象。注意Labrador构造器有两个参数:name和color,都是字符串类型。不要修改DogTest之外的任何文件,重新编译DogTest.java,观察碰到的错误。然后修改相应文件来修正该错误。
2. 在DogTest.java中添加代码,打印Labrador和Yorkshire两个类的平均种群重量。提示:使用avgBreedWeight()方法。在编译中如果遇到错误,请解决该错误,并给出正确结果。
3. 添加一个抽象方法int avgBreedWeight()至Dog.java。注意这就意味着需要使用关键字abstract来描述avgBreedWeight()方法,并且该方法没有方法体。重新编译所有程序,记录编译中出现的错误,以及解决的方法。
DogTest.java源代码如下:
public class DogTest {
    public static void main(String[] args) {
        Yorkshire yorkshire = new Yorkshire("xiaohei");
        Labrador labrador = new Labrador("xiaobai","white");
        System.out.Name() + " says " + yorkshire.speak());
        System.out.Name() +" says " + labrador.speak());
        System.out.Name() +
" BreedWeight "+yorkshire.avgBreedWeight()+ " says " + yorkshire.speak());
        System.out.Name() +
" BreedWeight "+labrador.avgBreedWeight()+" says " + labrador.speak());
    }
}
Yorkshire.java源代码如下:
public class Yorkshire extends Dog {
    private int breedWeight = 50;
    public Yorkshire(String name) {
        super(name);
    }
    public String speak() {
        return "woof";
    }
    public int avgBreedWeight() {
        return breedWeight;
    }
}
Labrador.java源代码如下:
public class Labrador extends Dog {
    private String color; // black, yellow, or chocolate?
    private int breedWeight = 75;
    public Labrador(String name, String color) {
        super(name);
        lor = color;
    }
    public String speak() {
        return "WOOF";
    }
    public int avgBreedWeight() {
        return breedWeight;
    }
}
Dog.java源代码如下:
public abstract class Dog {
    protected String name;
    public Dog(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public String speak() {
mun        return "Woof";
    }
    public abstract int avgBreedWeight();
}
设计类继承
1.编写一个抽象类(Shape),长方形、三角形和圆形均为其子类,并各有各的属性。其父类中有计算周长和面积的方法。在测试类中,分别建立如干个对象,计算并输出各对象的周长和面积。
Shape.java源代码如下:
public class Shape {
    private double area;
    private double circumference; 
    //图形类的构造函数 
    public Shape(){   
        area=0; 
        circumference=0;
        }   
    //返回图形的面积
    public double getarea(){ 
        return area;
        }   
    //返回图形的周长
    public double getcircumference(){ mae west
        return circumference;
        }
}
i dRectangle.java源代码如下:
public class Rectangle extends Shape {
    private double length;
    private double width; 
    private double area; 
    private double circumference;
    //长方形类的构造函数1,对长和宽赋值 
    public Rectangle( double l, double w){ 
        length=l;   
        width=w;   
        area=l*w;   
        circumference=2*(l+w);
        }   
    //长方形类的构造函数2,对长和宽赋值
    public Rectangle( int l, int w){ 
        length=(double)l;   
        width=(double)w;
        area=length*width; 
prent的意思        circumference=2*(length+width);
        }   
    //长方形类的构造函数3,对长和宽赋值 
    public Rectangle(String l,String w){ 
        length=Double.parDouble(l); 
        width=Double.parDouble(w);   
        area=length*width;   
        circumference=2*(length+width);
        } 
    //返回长方形的长
    public double getlength(){ 
        return length; 
        }   
    //返回长方形的宽
    public double getwidth(){
        return width;
        }   
    //返回长方形的面积 
    public double getarea(){ 
        return area; 
        } 
    //返回长方形的周长 
google code jam    public double getcircumference(){
        return circumference;
        }   
    //重新定义 equals方法
    public boolean equals(Object otherObject){ 
        if(this == otherObject)     
            return true;   
            if(otherObject==null)     
                return fal;     
                if(getClass()!=Class())   
                    return fal;       
                Rectangle other=(Rectangle)otherObject;
                return length==other.length&&width==other.width
                        &&area==other.area&&circumference==other.circumference;
                }   
    //重新定义hashCode方法
    public int hashCode(){   
        return (new Double(this.width).hashCode()+new Double(this.length).hashCode());
        }   
    //重新定义toString方法
    public String toString(){ 
        return "长:"+length+" 宽:"+width+"  面积:"+area+" 周长"+circumference;
        }
}
Triangle.java源代码如下:
public class Triangle extends Shape{
    private double circumference;
ass是什么意思
    private double area; 
    private double edge1; 
    private double edge2; 
    private double edge3; 
    //三角形类的构造函数,对三角形各边赋值
    public Triangle(double E1,double E2,double E3){ 
        double p,q; 
        edge1=E1;   
        edge2=E2; 
        edge3=E3; 
        circumference=edge1+edge2+edge3;   
        p=0.5*(edge1+edge2+edge3);   
        q=p*(p-edge1)*(p-edge2)*(p-edge3); 
        area=Math.sqrt(q);
        }   
    //返回边1的长?
    public double getedge1(){ 
        return edge1;
        }   
    //返回边2的长? 
    public double getedge2(){
        return edge2;
        }
    //返回边3的长?
    public double getedge3(){ 
        return edge3;
        }   
    //返回三角形的面积
    public double getarea(){ 
        return area;
        } 
    //返回三角形的周长
    public double getcircumference(){ 
        return circumference;
        }   
    //重新定义 equals方法
suffered
    public boolean equals(Object otherObject){ 
        if(this == otherObject)     
            return true;   
            if(getClass()!=Class())
                return fal;   
                if(otherObject==null) 
                    return fal;     
                    Triangle other=(Triangle)otherObject; 
                    return edge1==other.edge1     
                            &&edge2==other.edge2   
                            &&edge3==other.edge3 
                            &&area==other.area   
                            &&circumference==other.circumference;
                    } 
    //重新定义hashCode方法 
    public int hashCode(){ 
        return (new Double(this.edge1).hashCode()+new Double(this.edge2).hashCode()+new Double(this.edge3).hashCode()); 
        }    //重新定义 toString方法
    public String toString(){ 
        return "边1:"+edge1+" 边2:"+edge2+" 边3:"+edge3+" 面积:"+area+"  周长"+circumference;
        }
}
Circle.java源代码如下:
public class Circle extends Shape{
    double radius; 
    double pi=3.14; 
    private double area;
    private double circumference; 
    //圆形类的构造函数
    public Circle(double r){ 
        radius=r;   
        area=pi*r*r; 
        circumference=2*pi*r; 
        }   
    //返回圆的半径
    public double getradius(){ 
        return radius;
        } 
    //返回圆的面积
    public double getarea(){ 
        return area;
        }   
    //返回圆的周长
    public double getcircumference(){
        return circumference;
        }   
    public boolean equals(Object otherObject){ 
        if(this == otherObject)     
            return true;      lor什么意思中文
            if(getClass()!=Class()) 
                return fal;   
                if(otherObject==null) 
                    return fal;   
                    Circle other=(Circle)otherObject;   
                    return radius==other.radius       
                            &&pi==other.pi       
                            &&area==other.area
                            &&circumference==other.circumference; 
                    } 
    public int hashCode(){   
        return (new Double(this.radius).hashCode()); 
        }   
    public String toString(){ 
        return "半径:"+radius+" 面积:"+area+" 周长"+circumference;
        }
}
Test.java源代码如下:
/**
* Test 类的数组实现*/
public class Test {
    public static void main(String[] args){ 
        double sumArea;   
        double sumCircumference; 
        Shape[] s=new Shape[3];
        s[0]=new Rectangle(3,4);
        //定义一个长方形r1,长为3,宽为4 
        s[1]=new Circle(2);   
        s[2]=new Triangle(2,6,5); 
        for(Shape element :s) 
        System.out.println(element);
        sumArea=s[0].getarea()+s[1].getarea()+s[2].getarea(); 
        sumCircumference=s[0].getcircumference()+
s[1].getcircumference()+s[2].getcircumference(); 
        System.out.println("总面积:"+sumArea+", 总周长:"+sumCircumference); 
        }
}
2.
(1)设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x 和y值的public方法。
Point.java源代码如下:
public class Point {
    float x,y;
    public  Point(float a,float b){
    x=a;
    y=b;
    }
    public void tPoint(float x,float y){
    this.x=x;
    this.y=y;
    }
    public float getX(){
      return x;
      }
      public float getY(){
      return y;
        } 
      public static void main(String[] args){
      Point p1=new Point(12,20);             
      System.out.println("x的坐标为:"+p1.getX()); 
      System.out.println("y的坐标为:"+p1.getY());
      }
   
}
    (2).设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r、获取和设置r值的public方法、计算圆面积的public方法。
NCircle.java源代码如下:
public class NCircle extends Point { 
    protected float radius;
    // final float PI=3.14;
      public NCircle(float a,float b,float r){
      super(a,b);
      radius=r;
      }
      public void tCircle(float r){
      radius=r;
      }
      float getRadius(){
      return radius;
      }
    double area(){
      return 3.14*radius*radius;
      }
    public static void main(String[] args){
        NCircle c1=new NCircle(3, 4, 5);
        System.out.println("半径为:"+c1.getRadius()+"面积为:"+c1.area());        
      }
}
    (3).设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的public方法、计算圆柱体体积的public方法。
    (4).建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。
Cylinder.java源代码如下:
public class Cylinder extends NCircle { 
    float heigh;
    public Cylinder(float a,float b,float r,float h){
    super(a,b,r);
    heigh=h;
        }
        void tHeigh(float h){
    heigh=h;
        }
        float getHeigh(){
    return heigh;
        }
        double volume(){
    return super.area()*heigh;
        }
public static void main(String[] args){
    Cylinder c=new Cylinder(3, 4, 5, 6);
    Cylinder c1=new Cylinder(4, 5, 6, 7);
    Cylinder c2=new Cylinder(5, 6, 7, 8);
    System.out.println("面积为:"+c.volume());
    System.out.println("轴心坐标为:"+c1.getX()+","+c1.getY()+" 半径为:"+c1.getRadius()+" 高为:"+c1.getHeigh()+"体积为:"+c1.volume());
    System.out.println("轴心坐标为:"+c2.getX()+","+c2.getY()+" 半径为:"+c2.getRadius()+" 高为:"+c2.getHeigh()+"体积为:"+c2.volume());           
          }
}
  实验要求:
  . 每个类包含无参数和有参数的构造方法。构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。
  .子类的构造方法调用父类的构造方法,对父类中的成员变量初始化。
  .方法名自定;
四、实验结果与数据处理
1修改类继承中的错误如下图:
   
1.输出各对象的周长和面积的结果如下:
1.获取和设置x 和y值的public方法的结果如下:
   
2.计算圆面积的结果如下:
3.计算圆柱体体积的结果如下:
4.输出其轴心位置坐标、半径、高及其体积的值的结果如下:
五、分析与讨论
五、分析与讨论
通过本次实验,学会了使用super引用调用父类的构造方法。知道了抽象类代表的是一种概念,子类将基于这种概念来定义方法,因此抽象类不能实例化,并且进一步的理解了如何设计类间的层次结构。
六、教师评语
签名:
日期:
成绩

本文发布于:2023-07-01 10:20:13,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/163527.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:方法   实验   构造方法   错误   对象   继承   使用   文件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图