学 号 | 姓 名 | 专业、班 | ||||
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 条评论) |