为什么结果都是0呢?

public class shape
{
    static final double pi = 3.14;
    double length;
    double area;
    
    public double length(){
        return 0;
    }
    public double area(){
        return 0;
    }
}
 

public class circle extends shape{
    private double a;
    public circle(double r){
        a = r;
    }
    public double geta(){
        return a;
    }
    public void seta(double a){
        this.a = a;
    }
    @Override
    public double length(){
        return 2*pi*a;
    }    
    @Override
    public double area(){
        return pi*a*a;
    }
}
 

 

public class rectangle extends shape{
    private int m;
    private int n;
    
    public rectangle(int m,int n){
        this.m = m;
        this.n = n;
    }
    public int getm(){
        return m;
    }
    public void setm(int m){
        this.m = m;
    }
    public int getn(){
        return n;
    }
    public void setn(int n){
        this.n = n;
    }
    @Override
     public double length(){
         return 2*(m+n);     
     }
    @Override
     public double area(){
         return m*n;
     }
}
 

 

package shape;
import shape.shape;
import shape.circle;
import shape.rectangle;

import java.util.Scanner;

public class test {
    public static void main(String arg[]){
        shape[] shapes=new shape[2];
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入矩形的长和宽");
        int m=sc.nextInt();
        int n=sc.nextInt();
        shapes[0]=new rectangle(m,n);
        System.out.print("矩形的周长为:"+shapes[0].length);
        System.out.print("矩形的面积为:"+shapes[0].area);
        Scanner sd=new Scanner(System.in);
        System.out.println("请输入圆的半径");
        float r=sd.nextFloat();
        shapes[1]=new circle(r);
        System.out.print("圆的周长为:"+shapes[1].length);
        System.out.print("圆的面积为:"+shapes[1].area);
        
    }

}
 

结果:请输入矩形的长和宽
1
1
矩形的周长为:0.0矩形的面积为:0.0请输入圆的半径
1
圆的周长为:0.0圆的面积为:0.0

你输出的length和area是基类的成员变量,你没有初始化,都是0.实际你想调用的是子类的length()和area()函数啊