Когда я использую 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();
делать? Сам по себе?
11 ответов:
вызов ровно
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"); } }
вы также можете использовать
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
Если вы хотите, чтобы конструктор суперкласса был вызван-для инициализации полей в нем. Взгляните на эту статью, чтобы понять, когда ее использовать:
http://download.oracle.com/javase/tutorial/java/IandI/super.html
вы бы использовали его в качестве первой строки конструктора подкласса для вызова конструктора его родительского класса.
например:
public class TheSuper{ public TheSuper(){ eatCake(); } } public class TheSub extends TheSuper{ public TheSub(){ super(); eatMoreCake(); } }
создание экземпляра
TheSub
назвали бы какeatCake()
иeatMoreCake()
вы можете использовать его для вызова метода суперкласса (например, когда вы переопределяете такой метод, super.foo () etc) -- это позволит вам сохранить эту функциональность и добавить к ней все, что у вас есть в переопределенном методе.
Super вызовет ваш родительский метод. Смотрите: http://leepoint.net/notes-java/oop/constructors/constructor-super.html
вы называете
super()
специально запустить конструктор суперкласса. Учитывая, что класс может иметь несколько конструкторов, вы можете либо вызвать конкретный конструктор с помощьюsuper()
илиsuper(param,param)
oder вы можете позволить Java обрабатывать это и вызывать стандартный конструктор. Помните, что классы, следующие за иерархией классов, следуют за отношением" is-a".
первая строка конструктора вашего подкласса должна быть вызовом
super()
чтобы убедиться, что вызывается конструктор суперкласса.
Я просто попробовал, комментируя 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(); } }
из документации oracle страница:
если ваш метод переопределяет один из методов своего суперкласса, вы можете вызвать переопределенный метод с помощью ключевого слова
super
.вы также можете использовать
super
для ссылки на скрытое поле (хотя скрытие полей не рекомендуется).использование
super
в конструкторе подкласса:вызов конструктора суперкласса должен быть первым строкой в конструкторе подкласса.
синтаксис для вызова конструктора суперкласса
super();
или:
super(parameter list);
С
super()
, вызывается конструктор без аргументов суперкласса. Сsuper(parameter list)
, вызывается конструктор суперкласса с соответствующим списком параметров.Примечание: если конструктор явно не вызывается конструктор суперкласса, компилятор Java автоматически вставляет вызов без аргументов конструктор суперкласса. Если у суперкласса нет конструктора без аргументов, вы получите ошибку времени компиляции.
похожие темы: