我正在尝试创建一个简单的java继承程序以及super和this关键字的使用。在此处显示一个学生在三个主题中的两个学期sem1和sem2的成绩。
我想显示总分,即。 S1T(Sem1总计),S2T(Sem 2总计)以及总计。

//Student Record Keeping System
class Sem1
{
    int a,b,c,S1T,S1GT;
    Sem1(int a,int b,int c)
    {
        this.a=a;
        this.b=b;
        this.c=c;
    }

    void total()
    {
        S1T=a+b+c;
        S1GT=S1T;
    }


    void display()
    {
        System.out.println("S11: "+a);
        System.out.println("S12: "+b);
        System.out.println("S13: "+c);
        System.out.println("S1Total: "+S1T);
        System.out.println("S1Gtotal: "+S1GT);
        System.out.println("");
    }

    }

class Sem2 extends Sem1
{
    int p,q,r,S2T,S2GT;
    Sem2(int p,int q,int r)
    {
        this.p=p;
        this.q=q;
        this.r=r;
    }

    void total()
    {
        S2T=p+q+r;
        S2GT=S2T+S1T;
        }


    void display()
    {
        super.display();
        System.out.println("S21: "+p);
        System.out.println("S22: "+q);
        System.out.println("S23: "+r);
        System.out.println("S2Total: "+S2T);
        System.out.println("S2Gtotal: "+S2GT);
        System.out.println("");
    }

}


这是主班

class StudentRcd
{
    public static void main(String abc[])
    {
        Sem1 obj = new Sem1(10,20,30);
        obj.total();
        obj.display();

        Sem2 obj1 = new Sem2(20,30,40);
        obj1.total();
        obj1.display();
    }
}


错误:类Sem2中的构造函数Sem2无法应用于给定类型;
    {
    ^
  必需:int,int,int
  找到:没有参数
  原因:实际和正式论点清单的长度不同

请在这里帮助我。

最佳答案

我不认为您真的想要两个单独的课程。除了计算第二学期的总费用外,这两个班级几乎都是相同的。具有一个类的两个单独实例,并分别计算全年总数,可能会更好。

如果您确实想要两个通过继承关联的类,则您要么需要在Sem2的构造函数中调用super(),因为Sem1缺少默认的构造函数。这可能需要您在Sem2的构造函数中提供其他值,因为第1学期的分数不同于第2学期的分数。

class Sem2 extends Sem1
{
   int p,q,r,S2T,S2GT;
   Sem2( int a, int b, int c, int p,int q,int r)
   {
       super( a, b, c );
       this.p=p;
       this.q=q;
       this.r=r;
   }

10-07 15:27