有一道题目是这样的叫我实现一个接口,题目如下:定义一个矩形类,再定义接口EqualDiagonal,其中包含方法getDiagonal();由矩形类派生出一个正方形类,自行扩充成员变量和方法,并实现此接口EqualDiagonal。我编写了下面的程序,但是总是有错,我改不来啊,,清大家帮我看看啊,,知道的给我说哈。。谢谢了。import java.util.*;
class Matrix {
    double width;
    double length;
    public Matrix(double a,double b) 
    {
        width = a;
        length = b;
    }
 }
 interface EqualDiagonal
 {
     double getDiagonal();
 }
 class square extends Matrix implements EqualDiagonal
 {
     double width,length;
     public square(double a,double b)
     {
         width = a;
        length = b;
     }
     public double getDiagonal()
     {
         return width*length;
     }
 }
  public class shixian
  {
      public static void main(String[] args)
      {
          double  x;
          square y = new square(10,20);
          x = y.getDiagonal();
          System.out.println("after getDiagonal,the result is:");
          System.out.println(x);
      }
  }

解决方案 »

  1.   

    在你的 Matrix 类里加上:
    public Matrix()
    {
    }
      

  2.   

    d但是我已经写了构造函数了亚为什么要加上public Matrix()
    {
    }

      

  3.   

    研究一下Default Constructor就明白了。
      

  4.   

    那是不是每个类中都必须写像Matrix()这样的构造函数呢?{
    }
      

  5.   

    继承我用的不多,不过有一点就是如果A继承了一个类B,编译时错误提示是找不到B(),那么你就必须在B里加上B(){}
      

  6.   

    看来你对JAVA的class和interface还是不了解呀!
    Matrix 类,有两个成员变量,一个带参数的构造方法。
    EqualDiagonal 接口,有一个没有实现的方法。
    square(首字母要大写,虽然这不是强行这样写的,可是JAVA语言规范要求这么写的。)类,从Matrix类继承并且实现了EqualDiagonal接口。这个类中有两个成员变量和一个带参的构造方法。我一个实现EqualDiagonal 接口的方法。
    我现在先不说你的这个逻辑是否有错。就先说你的对继承过程中怎么处理构造方法的问题。
    1,在子类和父类中如果都有没有带参的构造方法的话,你这个是不会出错的,问题就在于你在子类中使用了带参的构造方法,所以你必须在子类的构造方法中去调用父类的构造方法。
    再一个构造方法是初始化对象的,你在产生子类对象时,就调用了父类的构造方法,还是你没有写。那就会出问题了。搂上说的用空的构造方法,< public Matrix(){}> 可是想过没有构造方法是来初始化对象的,如果是空的那有什么意思呀!
    你的测试类shixian类,首字母也没有大写。
    还有到目前为止我还没有看到你要用到java.util.*;包中的任何类,为什么要import呢?再说一点深一点的,也就是说你在产生一个子类的对象的时候,实际上在heap区产生了一个子类对象,并且在子类对象内产生了一个父类对象,也就是说当你继承也还实现子类可以访问父类对象的所以变量和方法。
      

  7.   

    //推荐代码
    class Square extends Matrix implements EqualDiagonal
     {
     //    double width,length;  在矩形类中已经定义了,勿须再定义一遍
         public Square(double a)//既然是正方形,干脆定义一个边长
         {
             super(a,a);//调用矩形的构造方法
         }
         public double getDiagonal()
         {
             return width*length;
         }
     }