Объяснение операции метод super () в Java

У меня проблема с супер-методом, но я действительно не знаю, что нужно сделать, чтобы он работал. Помогите!

public class ClassUno {

    public static void main(String[] args) {
    }

    ///// Clases Internas   ////

    class Primera {

        int k;
        public Primera( int s ) {
            k = s;
        }
    }

    class Segunda extends Primera {

        public Segunda() {
            super();
        }

        public Segunda( int n ) {
            k = n;
        }
    }
}
0
задан 18.04.2016, 15:44
2 ответа

Когда ты используешь наследство в Java, в строителях, которых ты объявляешь в классах, дочери всегда должны звонить в super(args) или в this(args), где:

  • super(args) ссылается на строителя класса отец.
  • this(args) он ссылается на строителя, определенного в настоящем классе.
  • args в super(args) и this(args) он относится к возможным аргументам, которых требует строитель, который называется.

Имей в виду, что в строителях класса дочь, по крайней мере строитель должен звонить в super() и остальные строители могут звонить в super() или this().

Это объясняет себе в спецификации Java, главы 8 Классов, делит 8.8 Заявления Строителей, секцию 8.8.7 Тело Строителя (контент ссылки на английском).

Зная это, давайте видеть определение Primera:

class Primera {
    int k;

    public Primera(int s) {
        k = s;
    }
}

Возможно наблюдаться, что только существует 1 строитель, который получает 1 аргумент типа int. Сейчас давайте видеть строители Segunda:

class Segunda extends Primera {
    public Segunda() {
        /*
            error de compilación
            Causa: No existe un constructor en la clase padre
            sin argumentos
        */
        super();
    }


    public Segunda( int n ) {
        /*
            error de compilación
            Causa: no se llama a super(args) o this(args) en la primera línea
        */
        k = n;
    }
}

У этого могут быть многообразные решения в зависимости от рисунка твоих классов. Здесь пример:

class Segunda extends Primera {
    public Segunda() {
        /*
            se llama al constructor Segunda(int)
            y se envía como argumento 0
        */
        this(0);
    }


    public Segunda( int n ) {
        /*
            se llama al constructor de la clase padre
            con argumento n. En la clase padre, va a inicializar
            el valor del campo k con el valor de la variable n
        */
        super(n);
    }
}
8
ответ дан 24.11.2019, 14:34
  • 1
    Большое спасибо, супер объясненное добро, большое спасибо. – Cristian Castillo 19.04.2016, 02:39

он думал бы, что твоя проблема находится в том, что, когда ты помещаешь супер tenes, который должен перемещать его как параметр признаки, которые у него есть в первом классе. В твоем случае это переменная "s". Тогда это у тебя осталось бы так:

public static void main(String[] args) {
}

Внутренних Классов

class Primera {

    int k;


    public Primera( int s ) {

        k = s;
    }
}

class Segunda extends Primera {

// aca es donde le pasas por parametro la variable s. si tuvieras mas variables deberias de pasarle todas las variables como parametro 

    public Segunda() {


        super(s);
    }


    public Segunda( int n ) {

        k = n;
    }
}
0
ответ дан 24.11.2019, 14:34
  • 1
    Второй строитель public Segunda(int n) не составлять и # 225; так как он не называет ни super, ни в this в первая l и # 237; nea Ваш c и # 243; я говорю. Первый строитель Segunda() не функционирует помещенный, что не известен qu и # 233; его s. –  18.04.2016, 07:04