请大佬看下为什么代码的测试类里不能直接使用多态?
/*这是子类——圆类*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.imooc; import java.util.Scanner; public class Circle extends Shape { Scanner in = new Scanner(System.in); public void call(){ System.out.println( "现在是计算圆的面积和周长" ); System.out.println( "请输入圆的半径" ); double r=in.nextDouble(); double Pi= 3.14 ; System.out.println( "圆的面积:" +Square(r,Pi)); System.out.println( "圆的周长:" +Leng(r,Pi)); } public double Square( double a, double b) { // TODO Auto-generated method stub double S; S=b*a*a; return S; } public double Leng( double a, double b) { // TODO Auto-generated method stub double l; l=b* 2 *a; return l; } } |
/*这是子类——矩形类*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package com.imooc; import java.util.Scanner; public class Rectangle extends Shape { Scanner in = new Scanner(System.in); public void call() { System.out.println( "计算矩形的周长和面积" ); System.out.println( "请输入两条边长" ); double a = in.nextDouble(); double b = in.nextDouble(); System.out.println( "矩形的面积是:" +Square(a,b)); System.out.println( "矩形的周长是:" +Leng(a,b)); } @Override public double Square( double a, double b) { // TODO Auto-generated method stub double S; S=a*b; return S; } @Override public double Leng( double a, double b) { // TODO Auto-generated method stub double l; l= 2 *(a+b); return l; } } |
/*这是父类*/
1 2 3 4 5 | package com.imooc; public abstract class Shape { public abstract double Square( double a, double b); public abstract double Leng( double a, double b); } |
/*这是测试类*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package com.imooc; public class Initial { public static void main(String[] args) { /*Rectangle rec = new Rectangle(); rec.call(); Circle cir = new Circle(); cir.call();*/ //以上方法是可行的 Shape rec = new Rectangle(); ((Rectangle) rec).call(); Shape cir = new Circle(); ((Circle) cir).call(); } //这个方法也是可行的 } |
我主要是想知道为什么以下内容会报错,必须改成上面那两种才可以
1 2 3 4 | Shape rec = new Rectangle(); rec.call(); Shape cir = new Circle(); cir.call() |