/*这是子类——圆类*/
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;
}
}/*这是子类——矩形类*/
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;
}
}/*这是父类*/
package com.imooc;
public abstract class Shape {
public abstract double Square(double a,double b);
public abstract double Leng(double a,double b);
}/*这是测试类*/
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();
}//这个方法也是可行的
}我主要是想知道为什么以下内容会报错,必须改成上面那两种才可以
Shape rec = new Rectangle(); rec.call(); Shape cir = new Circle(); cir.call()
因为你的call方法是子类的方法,不是从父类那儿继承过来的。然后你最后一种方式定义的对象rec和cir,都是Shape的父类,不具有call方法。