为了账号安全,请及时绑定邮箱和手机立即绑定

请大佬看下为什么代码的测试类里不能直接使用多态?

/*这是子类——圆类*/

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()


正在回答

代码语言

1 回答

因为你的call方法是子类的方法,不是从父类那儿继承过来的。然后你最后一种方式定义的对象rec和cir,都是Shape的父类,不具有call方法。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请大佬看下为什么代码的测试类里不能直接使用多态?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号