1、梧州学院实验报告专业班级: 学号: 姓名: 实验名称:实验四、继承与多态实验组号: 同组成员:无实验室名称: 实验时间:实验设备及环境:PC机一台,安装Windows/JDK,Eclipse软件实验目的:熟练掌握继承、方法的重写、上转型对象、抽象类的基本概念和方法。实验总结:指导老师评议:成绩评定: 指导老师签名:实验内容、实验步骤及实验结果记录:(注:每个人按自己完成实验的步骤来填写。)1 有一个类,声明如下:public class Fatherprivate int x;float y;protected double z;public String u;public Father(in
2、t x1,float y1,double z1,String u1)x=x1;y=y1;z=z1;u=u1;void dispX()System.out.println(x);protected void dispY()System.out.println(y);protected void dispZ()System.out.println(z);public void dispAll()dispX();dispY();以Father为父类,声明子类Son如下:public class Son extends Father private int v;public Son(int x1,fl
3、oat y1,double z1,String u1,int v1)super(x1,y1,z1,u1);v=v1;public void dispFZ()dispZ();public void dispV()System.out.println(v);在以下2种情况下,指出父类成员继承至子类后的访问权限,在下列空白处填上相应的内容父类与子类在同一个包下x(),y( ),z( ),u( ),dispX()( ),dispY()( ),dispZ()( ),dispU()( ),dispAll()( ) 父类与子类不在同一个包下x( ),y( ),z( ),u( ),dispX()( ),dis
4、pY()( ),dispZ()( ),dispU()( ),dispAll()( )然后在下述2种条件下上机运行程序,要求用子类创建一个对象:Son s=new Son(10,12.5f,22.5,”ok”,15),然后显示出该对象的各成员变量值。 Father类,Son类和主类在同一个包pu下。 Father类在pu包下,Son类在start包下,主类在默认包下。2.有类Father,其定义如下,具有数据成员x和成员方法func(),子类Son继承了Father,重写了它的两个成员,而Grandson继承了Son也重写了这两个成员。class Father public int x=3; p
5、ublic int func(int z)return x+z+1;class Son extends Fatherpublic int x=4; public int func(int z)return x+z+2;class Grandson extends Sonpublic int x=5; public int func(int z)return x+z+3; 定义一个主类MainClass,其主方法中定义如下对象Father f1=new Father();Father f2=new Son();Father f3=new Grandson();Son s1=new Son();S
6、on s2=new Grandson();Grandson g1=new Grandson();写出f1.x,f2.x, f3.x,s1.x, s2.x,g1.x的值,并写出f1.func(1), f2.func(2), f3.func(3), s1.func(1), s2.func(2), g1.func(3)的结果,并编写程序进行验证,分析结果所形成的原因。3.仿照书中例题,利用抽象类和上转型对象求锥体的体积。声明一个抽象类,表示锥体的底面图形:abstract class Geometry/图形抽象public static final double P=3.14159;/常量publi
7、c String name;/图形的名字public Geometry(String c1)name=c1;/构造方法public void disp()System.out.println(底面图形是:+name);public abstract double getArea();/求底面图形的面积的抽象方法再声明一个锥体类Cone,并声明两个成员变量,bottom代表底面,height代表高,编写构造方法给成员变量赋初值,编写求体积的方法。class Cone Geometry bottom;/圆锥的底面图形double height;/圆锥的高public Cone(Geometry b
8、1,double h1)bottom=b1;height=h1;public double getVolume()/求锥体的体积方法if(bottom=null)System.out.println(无底,不能求体积);return -1;else return bottom.getArea()*height/3;要求继承抽象类,定义圆类Circle和长方形类Rectangle,三角形类Triangle,并重写抽象方法。在主类的主方法中创建三个锥体对象,第一个对象为:锥体的底面为一个圆,其半径为10,高为10;第二个对象为:锥体的底面为长方形(20,15),高为20,第三个对象为:锥体的底面为
9、三角形,三条边长分别为(6,8,10),锥体的高为30.分别显示出这三个锥体的面积。abstract class Geometry/图形抽象public static final double P=3.14159;/常量public String name;/图形的名字public Geometry(String c1)name=c1;/构造方法public void disp()System.out.println(底面图形是:+name);public abstract double getArea();/求底面图形的面积的抽象方法class Cone Geometry bottom;/圆
10、锥的底面图形double height;/圆锥的高public Cone(Geometry b1,double h1)bottom=b1;height=h1;public double getVolume()/求锥体的体积方法if(bottom=null)System.out.println(无底,不能求体积);return -1;else return bottom.getArea()*height/3;class Circle extends Geometrydouble radius;public Circle(String n,double r) super(n);radius=r;p
11、ublic double getArea()return P*radius*radius;class Rectangle extends Geometrydouble length;double width;public Rectangle(String n,double l,double w) super(n);length=l;width=w;public double getArea()return length*width;class Triangle extends Geometrydouble apple;double boy;double cab;double paple;pub
12、lic Triangle(String n,double a,double b,double c) super(n);apple=a;boy=b;cab=c;public double getArea()double paple=(apple+boy+cab)/2;return Math.sqrt(paple*(paple-apple)*(paple-boy)*(paple-cab);public class MainClass public static void main(Stringargs) Geometry b=null;Cone c1=new Cone(b,10);System.o
13、ut.println(c1.getVolume();Geometry b1=new Circle(圆,10);Cone c2=new Cone(b1,10);b1.disp();System.out.println(c2.getVolume();Geometry b2=new Rectangle(长方形,20,15);Cone c3=new Cone(b2,20);b2.disp();System.out.println(c3.getVolume();Geometry b3=new Triangle(三角形,6,8,10);Cone c4=new Cone(b3,30);b3.disp();System.out.println(c4.getVolume();