[code=Java][java/code]import java.util.*;
class shape
{
int a ;
int b ;

float pai ;

public shape()
{
this.a = a ; //长
this.b = b ; //宽
this.pai = 3.1415926f ; //π
}

void zj ()
{
System.out.println("周长 " + ( a * b ) * 2 );
}
void mj ( )
{
System.out.println( "面积 " + ( a * b ));
}
}class Rect extends shape //矩形
{
void zj (int a , int b )
{
System.out.println("矩形周长 " + ( a * b ) * 2 );
}
void mj (int a , int b )
{
System.out.println( "矩形面积 " + ( a * b ));
}
}class  Circle extends shape //(圆形)
{
public Circle ( int r )
{
this.a = r ; //r代表半径
}
void zj ( int a  )
{
System.out.println("园周长" +( 2 * pai * a) );
}
void mj ( int a )
{
System.out.println("园面积" + ( a * a * pai));
}
}class Square extends Rect
{
public Square ( int s )
{
this.a = s ;
}
void zj ( int a )
{
System.out.println ("正方形周长"+ ( a * 4) );
}
void mj (int a )
{
System.out.println("正方形面积:" + ( a * a));
}
}
class Lei
{
public static void main ( String [] args )
{
Rect r = new Rect();
Circle c = new Circle();
//Square s = new Square();
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
//r.zj(m);
c.zj(m);
c.mj(m);

}
}思路对吗? 这应该是面向对象的思路吧?? 我怎么传参就错误啊 ?????? 那个高手给我详细说下我错在哪里了嘛??

解决方案 »

  1.   

    Circle c = new Circle();
    构造函数是有参数的,你没参数怎么行呢。加个参数,程序就能跑了
      

  2.   

    Circle c = new Circle();  这句有问题
    你的构造函数是带参数的public Circle ( int r )
    Circle c = new Circle();  这句要传个参数进去
      

  3.   

    代码比较难看,COPY一下发现语法错误
    Circle c = new Circle(); 没有为Circle定义默认构造
    public shape()
    {
    this.a = a ; //长
    this.b = b ; //宽
    this.pai = 3.1415926f ; //π
    }
    这里的长 宽赋值是多余的.
    做为形状,一定会有长宽吗?pai也不是形状特性吧 还不够抽象c.zj(m);
    c.mj(m);
    这样子调用跟普通函数比较除了多了对象增加了内存消耗 没什么优势
      

  4.   

    对啊, Circle的构造方法是有参数的, 你new的时候都没放参数进去
      

  5.   

    弱弱的说一句 是不是 如果子类Circle不写构造方法的话 就是 系统默认会写super父类的构造参数呢??
      

  6.   

    弱弱的说一句 是不是 如果子类Circle不写构造方法的话 就是 系统默认会写super父类的构造参数呢??
      

  7.   

    package com.xg.Thread;import java.util.*;class shape {
    int a;
    int b;
        double count;
    float pai;
      
    public shape() {
    this.a = a; // 长
    this.b = b; // 宽
    this.pai = 3.1415926f; // π

    }
    void zj() {

    System.out.println("周长 " + (a * b) * 2);
    } void mj() {
    System.out.println("面积 " + (a * b));
    }}
    class Rect extends shape // 矩形
    {
     void zj(int a, int b) {
     count= (a * b) * 2;
    System.out.println("矩形周长 " +count);
    } void mj(int a, int b) {
     count=a*b;
    System.out.println("矩形面积 " + count);
    }

    }class Circle extends shape //(圆形)
    {
    public Circle ( int r )
    {
    this.a = r ; //r代表半径
    }
    void zj ( int a )
    {
    System.out.println("园周长" +( 2 * pai * a) );
    }
    void mj ( int a )
    {
    System.out.println("园面积" + ( a * a * pai));
    }
    }
    class Square extends Rect
    {
    public Square ( int s )
    {
    this.a = s ;
    }
    void zj ( int a )
    {
    System.out.println ("正方形周长"+ ( a * 4) );
    }
    void mj (int a )
    {
    System.out.println("正方形面积:" + ( a * a));
    }
    } class hh {
    public static void main(String[] args) {
    shape sh =new shape();
    Rect r = new Rect();
    r.zj(2,3);
    r.mj(3,4);
    Circle c=new Circle(3);
    c.mj(2);
    c.zj(2);
    Square  sq=new Square(3);
    sq.zj(3);
    sq.mj(3);

    }
    }没错了 呵呵 !
      

  8.   

    如果没有给一个类写一个构造方法,JVM会提供一个默认的无参的构造方法,你一旦写了一个构造方法(有参或者无参),那么默认的构造方法就不会提供了.
      

  9.   

    他们都有长或则宽吧。   pai倒不是 应该写在圆里的变量
    当时就是想到这些形状都有长度的 所以就把他们的长和宽给抽了出来放在父类里
    可不知道具体要怎么样去考虑这个抽象 只是在找他们的共性