您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验五 Java的类及多态性
实验五Java的类及多态性一、实验目的:1.掌握Java类及多态性的含义。2.掌握instanceof的使用方法。3.掌握应用变量的转换。二、实验要求:编写一个能体现多态性的Java应用程序。三、实验内容:(1)类1、常量的声明:声明一个常量PI,编译它,查看有何错误并修改。错误:classPoint{intx,y;staticintz;finaldoublePI=3.1415926;[修改:赋值3.1415926]Point(inta,intb){x=a;y=b;}Point(){this(1,1);}staticvoidoutput(){System.out.println(output()called);System.out.println(z);}voidoutput(inta,inty){output();z=5;this.x=x;this.y=y;}publicstaticvoidmain(String[]args){Pointpt1=newPoint();Pointpt2=newPoint();pt1.z=5;pt2.z=6;System.out.println(pt1.z);}}2、声明一个静态的常量:修改上题的前半部分,如下。编译,查看有何错误,并修改错误:classPoint{intx,y;staticintz;finaldoublePI;[修改:删除static。]Point(inta,intb){PI=3.1415926;x=a;y=b;}Point(){this(1,1);}staticvoidoutput(){System.out.println(output()called);System.out.println(z);}voidoutput(inta,inty){output();z=5;this.x=x;this.y=y;}publicstaticvoidmain(String[]args){Pointpt1=newPoint();Pointpt2=newPoint();pt1.z=5;pt2.z=6;System.out.println(pt1.z);}}3、继承:新建一个Animal.java文件,并编译它。查看源文件的当前目录下生成了几个类文件,并选择一个执行它,输出结果。classAnimal{intheight,weight;voideat(){System.out.println(animaleat);}voidsleep(){System.out.println(animalsleep);}voidbreathe(){System.out.println(animalbreathe);}}classFishextendsAnimal{}classIntegration{publicstaticvoidmain(String[]args){Animalan=newAnimal();Fishfh=newFish();an.breathe();fh.height=30;fh.breathe();}}4、修改上题中的classFishextendsAnimal类,如下,并执行它,查看结果。classFishextendsAnimal{voidbreathe(){System.out.println(animalbubble);}}5、再次修改classFishextendsAnimal类和Integration类,如下,并执行,查看结果。并思考课件中对于super的说明。classAnimal{intheight,weight;voideat(){System.out.println(animaleat);}voidsleep(){System.out.println(animalsleep);}voidbreathe(){System.out.println(animalbreathe);}}classFishextendsAnimal{intheight;voidbreathe(){super.breathe();super.height=40;System.out.println(fishbubble);}}classIntegration{publicstaticvoidmain(String[]args){//Animalan=newAnimal();Fishfh=newFish();//an.breathe();fh.height=30;fh.breathe();}}Super用法:提供了对父类的访问。可以使用super访问父类被子类隐藏的变量或覆盖的方法。6、分别在Animal类和Fish类中,添加构造方法如下:并将Integration类,修改如下classAnimal{intheight,weight;voideat(){System.out.println(animaleat);}voidsleep(){System.out.println(animalsleep);}voidbreathe(){System.out.println(animalbreathe);}Animal(){System.out.println(animalconstruct);}}classFishextendsAnimal{intheight;voidbreathe(){super.breathe();super.height=40;System.out.println(fishbubble);}Fish(){System.out.println(fishconstruct);}}classIntegration{publicstaticvoidmain(String[]args){//Animalan=newAnimal();Fishfh=newFish();}}查看执行结果,并思考为什么思考:当实类化对象时,会默认执行里边的构造方法。7、执行下边程序,并修改错误classAnimal{intheight,weight;Animal(intheight,intweight){System.out.println(animalconstruct);}voideat(){System.out.println(animaleat);}voidsleep(){System.out.println(animalsleep);}voidbreathe(){System.out.println(animalbreathe);}}classFishextendsAnimal{intheight;Fish(){super();System.out.println(fishconstruct);}voidbreathe(){//super.breathe();//super.height=40;System.out.println(fishbubble);}}classIntegration{publicstaticvoidmain(String[]args){//Animalan=newAnimal();Fishfh=newFish();}}修改:给super赋值。(2)多态性1、注意成员变量和成员方法的调用,查看输出结果classAnimal{intheight=1,weight=1;Animal(){}voideat(){System.out.println(animaleat);}voidsleep(){System.out.println(animalsleep);}voidbreathe(){System.out.println(animalbreathe);}}classFishextendsAnimal{intheight=10;Fish(){}voidbreathe(){System.out.println(fishbreathe);}voidswim(){System.out.println(fishswim);}}classIntegration{staticvoidfn(Animalan){an.breathe();}publicstaticvoidmain(String[]args){Animalan=newAnimal();System.out.println(an.height);an.eat();an.breathe();Fishfh=newFish();System.out.println(fh.height);fh.breathe();fh.swim();Animalx=newFish();System.out.println(x.height);x.eat();x.breathe();}}2、在main方法中,用x调用swim方法,添加代码如下:x.swim();编译后,发现有何错误?修改:引用变量只能调用声明该变量时所用类里包含的方法。3、instanceof方法的使用在上题main方法中添加如下代码,并写出结果classAnimal{intheight=1,weight=1;Animal(){}voideat(){System.out.println(animaleat);}voidsleep(){System.out.println(animalsleep);}voidbreathe(){System.out.println(animalbreathe);}}classFishextendsAnimal{intheight=10;Fish(){}voidbreathe(){System.out.println(fishbreathe);}voidswim(){System.out.println(fishswim);}}classIntegration{staticvoidfn(Animalan){an.breathe();}publicstaticvoidmain(String[]args){Animalan=newAnimal();System.out.println(an.height);an.eat();an.breathe();Fishfh=newFish();System.out.println(fh.height);fh.breathe();fh.swim();Animalx=newFish();System.out.println(x.height);x.eat();x.breathe();Fishfh2=(Fish)x;fh2.swim();if(xinstanceofFish){System.out.println(xisfish'sinstance);}else{System.out.println(xisn'tfish'sinstance);}if(fhinstanceofAnimal){System.out.println(fhisanimal'sinstance);}else{System.out.println(fhisn'tanimal'sinstance);}}}4、引用变量之间的强制类型转换阅读程序,并编译,查看有何错误publicclassTestConversion{publicstaticvoidmain(String[]args){doubled=13.4;longl=(long)d;System.out.println(l);intin=5;//下面代码编译时出错:试图把一个数值型变量转换为boolean型,//编译时候会提示:不可转换的类型//booleanb=(boolean)in;Objectobj=Hello;//obj变量的编译类型为Object,是String类型的父类,可以强制类型转换//而且obj变量实际上类型也是String类型,所以运行时也可通过StringobjStr=(String)obj;System.out.println(objStr);//定义一个objPri变量,
本文标题:实验五 Java的类及多态性
链接地址:https://www.777doc.com/doc-3229409 .html