Подтвердить что ты не робот

Когда я использую super()?

В настоящее время я изучаю наследование классов в своем Java-курсе, и я не понимаю, когда использовать вызов super()?

Edit:
Я нашел этот пример кода, где используется super.variable:

class A
{
    int k = 10;
}

class Test extends A
{
    public void m() {
        System.out.println(super.k);
    }
}

Итак, я понимаю, что здесь вы должны использовать super для доступа к переменной k в суперклассе. Однако, в любом другом случае, что делает super();? Само по себе?

4b9b3361

Ответ 1

Вызов точно super() является всегда избыточным. Он явно делает то, что было бы неявно сделано иначе. Это потому что, если вы опустите вызов супер-конструктора, супер-конструктор без аргументов будет вызываться автоматически в любом случае. Не сказать, что это плохой стиль; некоторым людям нравится быть явным.

Однако, когда это становится полезным, это когда суперконструктор принимает аргументы, которые вы хотите передать из подкласса.

public class Animal {
   private final String noise;
   protected Animal(String noise) {
      this.noise = noise;
   }

   public void makeNoise() {
      System.out.println(noise);
   }
}

public class Pig extends Animal {
    public Pig() {
       super("Oink");
    }
}

Ответ 2

super используется для вызова constructor, methods и properties родительского класса.

Ответ 3

Вы также можете использовать ключевое слово super в подклассе, если вы хотите вызывать метод из родительского класса, когда вы переопределили его в подклассе.

Пример:

public class CellPhone {
    public void print() {
        System.out.println("I'm a cellphone");
    }
}

public class TouchPhone extends CellPhone {
    @Override
    public void print() {
        super.print();
        System.out.println("I'm a touch screen cellphone");
    }
    public static void main (strings[] args) {
        TouchPhone p = new TouchPhone();
        p.print();
    }
}

Здесь строка super.print() вызывает метод print() суперкласса CellPhone. Выход будет:

I'm a cellphone
I'm a touch screen cellphone

Ответ 4

Если вы хотите, чтобы конструктор суперкласса вызывался - для инициализации полей внутри него. Взгляните на эту статью, чтобы понять, когда ее использовать:

http://download.oracle.com/javase/tutorial/java/IandI/super.html

Ответ 5

Вы использовали бы его как первую строку конструктора подкласса, чтобы вызвать конструктор его родительского класса.

Например:

public class TheSuper{
    public TheSuper(){
        eatCake();
    }
}

public class TheSub extends TheSuper{
    public TheSub(){
        super();
        eatMoreCake();
    }
}

Построение экземпляра TheSub вызовет как eatCake(), так и eatMoreCake()

Ответ 6

Вы можете использовать его для вызова метода суперкласса (например, когда вы переопределяете такой метод, super.foo() и т.д.) - это позволит вам сохранить эту функциональность и добавить к ней все, что у вас есть в методе переопределения.

Ответ 8

Вы вызываете super(), чтобы специально запустить конструктор вашего суперкласса. Учитывая, что класс может иметь несколько конструкторов, вы можете вызвать конкретный конструктор с помощью super() или super(param,param) или вы можете позволить Java обрабатывать это и вызывать стандартный конструктор. Помните, что классы, которые следуют за иерархией классов, следуют за отношением "is-a".

Ответ 9

Первая строка конструктора вашего подкласса должна быть вызовом super(), чтобы гарантировать, что вызывается конструктор суперкласса.

Ответ 10

Из документации oracle страница:

Если ваш метод переопределяет один из его методов суперкласса, вы можете вызвать переопределенный метод с помощью ключевого слова super.

Вы также можете использовать super для ссылки на скрытое поле (хотя скрывать поля не рекомендуется).

Использование super в конструкторе подклассов:

Вызов конструктора суперкласса должен быть первой строкой в ​​конструкторе подкласса.

Синтаксис для вызова конструктора суперкласса

super();  

или

super(parameter list);

С super() вызывается конструктор без аргументов суперкласса. С помощью super(parameter list) вызывается конструктор суперкласса с соответствующим списком параметров.

Примечание. Если конструктор явно не вызывает конструктор суперкласса, компилятор Java автоматически вставляет вызов конструктору без аргументов суперкласса. Если у суперкласса нет конструктора без аргументов, вы получите ошибку времени компиляции.

Похожие сообщения:

Полиморфизм против переопределения и перегрузки

Ответ 11

Я просто попробовал, комментируя super(); делает то же самое, не комментируя это, как @Mark Peters сказал

package javaapplication6;

/**
 *
 * @author sborusu
 */
public class Super_Test {
    Super_Test(){
        System.out.println("This is super class, no object is created");
    }
}
class Super_sub extends Super_Test{
    Super_sub(){
       super();
       System.out.println("This is sub class, object is created");
    }
    public static void main(String args[]){
        new Super_sub();
    }
}