2013-07-15 2 views
1

Я пытаюсь создать простую программу наследования Java, а также использовать супер и это ключевое слово. показывая здесь оценки ученика по трем предметам на 2 семестра sem1 и sem2. Я хочу показать общие оценки, т. Е. S1T (Sem1 всего), s2t (Сем 2 всего), а также общая сумма ..Java Inheritance с использованием супер

//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 не найдено: нет аргументов причин: фактические и формальные списки аргументов различаются по длине

любезно помочь мне здесь ..

+0

в вашем конструкторе Sem2, ваша первая строка должна быть 'super (p, q, r);' –

+0

Я не тестирую его, но я думаю, что ваш код даже компилируется, потому что ваш родительский класс не имеет конструктора без параметров, вам нужно вызвать 'super (int, int, int)' в дочернем классе – nachokk

+0

Спасибо за помощь .. я понял. –

ответ

1

Я не думаю, что вам действительно нужны два отдельных класса. Два класса в основном одинаковы, за исключением вычисления всего семестра 2. Лучше работать с двумя отдельными экземплярами одного класса и вычислять общую сумму за весь год отдельно.

Если вы сделали хотите два класса, связанные с наследованием, то вам нужно будет вызвать super() в конструкторе Sem2, потому что 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; 
    } 
+0

Почему не защищен? теперь, если они находятся в одном пакете, есть доступ – nachokk

+0

Сэр .. я получил это правильно .. и я попробую другой способ тоже .. спасибо очень много .. –

1

Вы забыли вызвать конструктор супер класс в Sem2. например вы должны иметь:

Sem2(int p,int q,int r) 
{ 
    super(p,q,r); 
    this.p=p; 
    this.q=q; 
    this.r=r; 
} 
+0

сэр, вы правы .. мои программы работают. thankyou –

0

Sem2 необходимо вызвать супер конструктор супер (интермедиат, Int, Int). Sem2 либо нужно взять еще три разряда, либо SEM1, который он может использовать для вызова супер-конструктора.

+0

thankyou sir, я понял это правильно. –

1

Во-первых, ваша компиляция связана с тем, что вы не вызываете конструктор Sem1 в своем конструкторе Sem2, поскольку Sem1 не имеет конструктора аргументов/по умолчанию 0. Вам нужно добавить super(p,q,r); в качестве первой строки вашего конструктора Sem2.

Во-вторых, что еще более важно, вы, кажется, неправильно используете наследование. Похоже, нет причин иметь объект Sem2, который наследуется от Sem1. Я думаю, вы могли бы просто иметь два экземпляра объекта Semester вместо того, чтобы иметь по существу идентичные классы Sem1 и Sem2.

Фактически, Sem2 в качестве подкласса Sem1 нарушает общие рекомендации по наследованию, поскольку Sem2 не является Sem1 (нет отношения «есть»). Sem1 и Sem2 оба являются семестрами, поэтому у вас могут быть классы Semester, а затем Sem1 и Sem2, если для каждой из них существует уникальная логика.

+0

сэр, я понял.Я изучаю язык и благодарю за отличное предложение .. thankyou. –