问题描述
importjava.util.Scanner;classCircle{intR;publicstaticfinaldoublePI=3.14;publicCircle(intr){R=r;}publicdoublegetArea(){returnPI*R*R;}publicdoublegetPerimeter(){return2*PI*R;}}classCylinderextendsCircle{intH;publicCylinder(intr,inth){super(r);H=h;}publicdoublegetArea(){returngetPerimeter()*H+2*super.getArea();}publicdoublegetVolume(){returngetArea()*H;}}classTestsuper{publicstaticvoidmain(Stringargs[]){Scannerscanner=newScanner(System.in);intR=scanner.nextInt();intH=scanner.nextInt();Cylindere=newCylinder(R,H);System.out.println("圆柱体的表面积="+e.getArea());System.out.println("圆柱体的体积="+e.getVolume());Circlet=newCylinder(R,H);System.out.println("圆的周长="+t.getPerimeter());System.out.println("圆的面积="+t.getArea());}}找出错误,圆柱体的表面积和圆的面积相等!
解决方案
解决方案二:
先贴代码,问题在于测试类中:importjava.util.Scanner;classTestsuper{publicstaticvoidmain(Stringargs[]){Scannerscanner=newScanner(System.in);System.out.println("请输入圆的半径:");intR=scanner.nextInt();System.out.println("请输入圆柱的高度:");intH=scanner.nextInt();Cylindere=newCylinder(R,H);System.out.println("圆柱体的表面积="+e.getArea());System.out.println("圆柱体的体积="+e.getVolume());Circlet=newCircle(H);System.out.println("圆的周长="+t.getPerimeter());System.out.println("圆的面积="+t.getArea());}}
楼主的Cylindere=newCylinder(R,H);Circlet=newCylinder(R,H);这2句,请楼主仔细看看。不管是对象e还是t都是Cylinder类型的,区别就是在调用时候用了多态。对于求面积的话,根本不需要用到高。所以,请楼主仔细看看区别。
解决方案三:
那是否可以用子类创建对象来调用父类呢?