请教怎么在父类中创建三个不同的形状对象,放在Shape类型的数组里,分别打印出每个对象的周长和面积

请问如何在父类中创建三个不同的形状对象,放在Shape类型的数组里,分别打印出每个对象的周长和面积
package extend;

public class Shape {

public static void main(String[] args) {
 
 Shape ss[] = new Shape[3];
 Shape s = new Rect(3,3);
//System.out.println( s.getMianji() + s.getZhouchang());
         Shape s1= new Circle(3);
         Shape s2 = new Square(4, 0);
 
}

}
package extend;

public class Rect extends Shape{

double length;
double width;

public Rect( double length , double width){

this.length = length;
this.width = width;

}
public double getLength() {
return length;
}





public void setLength(double length) {
this.length = length;
}





public double getWidth() {
return width;
}





public void setWidth(double width) {
this.width = width;
}

   public double getMianji(double length , double width){
   
   return length * width; 
   
   }

   public double getZhouchang(double length , double width){
   
   return (length + width) * 2;
   }


public static void main(String[] args) {
// TODO Auto-generated method stub

}

}
package extend;

public class Circle extends Shape {

double banjing;

public Circle(double banjing){

this.banjing = banjing;

}

 public double getBanjing() {
return banjing;
}

    public void setBanjing(double banjing) {
this.banjing = banjing;
}

    public double getZhouchang(double banjing){

return Math.PI * banjing * 2;

}

    public double getMianji(double banjing){

return Math.PI * banjing * banjing;

}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

------解决思路----------------------
 图形基类。这是一个抽象类,约束了其子类必须实现计算周长和面积的方法。

public abstract class Shape {
public abstract double getMianji();
public abstract double getZhouchang();
}

圆形类。

public class Circle extends Shape {

double banjing;

public Circle(double banjing) {
this.banjing = banjing;
}

public double getBanjing() {
return banjing;
}

public void setBanjing(double banjing) {
this.banjing = banjing;
}

@Override
public double getZhouchang() {
return Math.PI * banjing * 2;
}

@Override
public double getMianji() {
return Math.PI * banjing * banjing;
}
}

矩形类。

public class Rect extends Shape {

double length;
double width;

private double mianji;
private double zhouchang;

public Rect(double length, double width) {
this.length = length;
this.width = width;
calc();
}

public double getLength() {
return length;
}

public void setLength(double length) {
this.length = length;
calc();
}

public double getWidth() {
return width;
}

public void setWidth(double width) {
this.width = width;
calc();
}

//当某个计算结果会被频繁使用时,而不会频繁变化时,可以
//在其相关量变化时更新,并保存,用牺牲内存减少计算量
private void calc(){
this.mianji = this.length * this.width;
this.zhouchang = 2*(this.length + this.width);
}

@Override
public double getMianji() {
return this.mianji;
}

@Override
public double getZhouchang() {
return this.zhouchang;
}
}

测试类。

/**
 * 测试类。
 * @author zys59三仙半(QQ:597882752)
 * 创建时间:2015年5月20日 上午8:45:14
 */
public class TestShape {
public static void main(String[] args) {
Shape [] shapes = new Shape[3];
shapes[0] = new Circle(10);
shapes[1] = new Rect(10, 20);
shapes[2] = new Circle(1);
Shape shape;
for (int i = 0; i < shapes.length; i++) {
shape = shapes[i];
System.out.println(i+":周长="+shape.getZhouchang()+", 面积="+shape.getMianji());
}
}
}

------解决思路----------------------
引用:
@三仙半 请问为什么设置shape为抽象类?还有为什么rect类中private double mianji要使用private?
public void setWidth(double width) {
        this.width = width;
        calc();
    }中 calc()是什么?
父类中设置对象可以调用子类方法输出吗?
谢谢!

为什么rect类中private double mianji要使用private?
    面向对象的开放封闭原则,这里用private意思就是说mianji只能通过计算得到,除此之外都不能变化mianji的值。目的就是保证长宽和面积匹配,不会发生长宽是5和6的时候面积被别人搞成30以外的情况。

中 calc()是什么?-----------calculate的缩写,计算的意思

父类中设置对象可以调用子类方法输出吗?------------------------分场合,一般不建议父类显式调用子类的方法。

PS:英文好好学
------解决思路----------------------
这不是java编程思想中的例子吗,你去看下吧