第一个类class Compute{
   int i1;
   int i2;
   Compute(int m,int n){
      i1=m;
      i2=n;
   }
   int sum(){
      return i1+i2;
   }
   int minus(){
      return i1-i2;
   }
}第二个类class Compute_2 extends Compute{
   int multiply(){
      return i1*i2;
   }
   double divide(){
      return i1/i2;
   }
}编译第二个类时出现如下错误:
Compute_2.java:1:Compute<int,int> in Compute cannot be applied to <>
class Compute_2 extends Compute{
^
1 error
请问高手如何解决?

解决方案 »

  1.   

    Compute_2.class由于没有显式的构造器,所以系统自动生成一个构造器。而导出类的构造器必定要调用基类的构造器。导出类缺省构造器会自动调用基类的无参构造器。由于你的基类没有无参构造器,所以调用出错。
    解决办法:给Compute_2写一个构造器。
    Compute_2(int m,int n)
    {
       super.(m,n);
    }或者给基类写一个缺省构造器,这是理论上解决的办法,但实际上不会使用。因为他只能赋予导出类固定的值。Compute()
    {
        i1=1;i2=1;
    }
      

  2.   

    子类继承父类,如果父类的够照函数不是默认的,那么字类也应该有和父类一样的够照函数,用来正确的初始化父类.你的字类应该这样写
    class Compute_2 extends Compute{
       Compute_2(int m,int n){
         super(m,n);正确初始化父类//而且这里也必须先调用supert(m,n);否则提示出错
       }
       int multiply(){
          return i1*i2;
       }
       double divide(){
          return i1/i2;
       }
    }
      

  3.   

    谢谢您!我是要另外写一个Compute_2.java 吗?还是在Compute_2.java 中加入Compute_2(int m,int n)
    {
       super.(m,n);
    }但是我刚刚试验,在Compute_2.java 中加入,结果还是出错:
    Compute_2.java:3:<identifier> expected
          super.(m,n);
                ^
    Compute_2.java:3:not a statement
          super.(m,n);
               ^ 
    2 error
    请再帮忙!    
      

  4.   

    非常感谢 ngqzmjmj(冷酷) 和 gogon() !问题解决!
      

  5.   

    这是一个关于构造函数问题,如果一个类继承另一类,系统会自动在这个类的构造函数的第一句加上 
    super();来调用它父类的构造函数,如果你的子类没有构造函数,系统也会自动生成构造函数,函数体也是super();以此来调用它父类的构造函数。你程序的父类没有无参构造函数,所以子类构造函数中的
    super();(这是系统自动帮你加上的,而且在构造函数的第一句)就会找不到父类的无参构造函数,所以会报错。你可以在父类中写一个无参构造函数,函数体为空,那样应该不会有错了。
      

  6.   

    class Compute{
       int i1;
       int i2;
       Compute(int m,int n){
          i1=m;
          i2=n;
       }
       Compute()
       {   }
       int sum(){
          return i1+i2;
       }
       int minus(){
          return i1-i2;
       }
    }
      

  7.   

    请问 zhang26chao(张超) !我现在按你的方法,结果编译主类时出错。父类:class Compute02{
       int i1;
       int i2;
       Compute02(int m,int n){
          i1=m;
          i2=n;
       }
       Compute02(){
       }
       int sum(){
          return i1+i2;
       }
       int minus(){
          return i1-i2;
       }
    }
    子类:class Compute_02 extends Compute02{
       int multiply(){
          return i1*i2;
       }
       double divide(){
          return i1/i2;
       }
    }主类:class Run_compute02{
       public static void main(String[] arguments){
          Compute_02 obj=new Compute_02(5,10);
          System.out.println("5和10之和等于:"+obj.sum()+"\n");
          System.out.println("5和10之差等于:"+obj.minus()+"\n");
          System.out.println("5和10之积等于:"+obj.multiply()+"\n");
          System.out.println("5和10之商等于:"+obj.divide()+"\n");
       }
    }
    在编译主类时出错:Run_compute02.java:3: cannot resolve symbol
    symbol : constructor Compute_02<int,int>
    location: class Compute_02
              Compute_02 obj=new Compute_02(5,10);1 error
    请帮忙解决!
                             ^   
      

  8.   

    当然有错!你的子类根本没有带参构造函数,你怎么能用呢?
    上次你没有写主类,既然你要用 Compute_02 obj=new Compute_02(5,10);
    那你为什么不直接在子类写构造函数呢?你在子类中可以自己调用不用系统调用,
    Compute_02(int m,int n)
    {
       super(m,n);
    }