2015-08-27 5 views
0

В чем разница между этими двумя конструкторами.В чем разница между конструктором с супер() и отсутствием вызова функции super() в Java-классе

public Students(String name, String address) { 
    super(); 
    this.name = name; 
    this.address = address; 
} 

/*Here is constructor without super function call.*/ 
public Students(String name, String address) { 
    this.name = name; 
    this.address = address; 
} 

ответ

3

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

2

Отсутствие разницы, его просто вопрос явного и неявного. Во втором случае он неявно вызывает супер-конструктор этого класса Students, если он унаследован от родительского класса. Подробнее об этом читайте. Вы можете найти более подробную информацию, если вы это сделаете.

public class A { 
    //there is a hidden constructor. Even if you explicitly write it 
    //public A(){ 
    //} 
} 

public class B extends A { 
private int i; 


public B(int x){ 
    this.i = x; 
} 

} 

При создании формы объекта B вы сначала вызываете конструктор A неявным образом. Вы можете явно указать его.

в

public B(int x){ 
     super(); 
     this.i = x; 
} 
0

super() просто вызывает родительский конструктор функции и позволяет либо передать аргументы, такие как super(someArgument) или могут быть использованы для вызова методов родительского конструктора, таких как super.someMethod().

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

Отъезд The Java™ Tutorials или JavaTPoint, чтобы узнать больше.

0

Java неявно вызывает конструктор суперкласса, если вы не назвали его явно (конструктора цепочки - искать этот термин на Google для получения дополнительной информации). Даже если ваш класс явно не унаследован от какого-либо класса, java неявно делает его наследованием класса Object (и делает вызов конструктору класса Object).

Таким образом, между ними нет никакой разницы.

1

какая разница между конструкцией, имеющей суперфункцию и без нее.

Ну, это легко проверить. На самом деле они одинаковы для этого случая. Что еще более важно, вы, вероятно, захотите узнать, когда и как использовать super.

Идущих следующие коды:

public class Test 
{    
    public static void main(String[] args) 
    {  
     new Students("a", "b"); 
    } 
} 

class Parent 
{ 
    public Parent(){ 
     System.out.println("Parent class constructor invoked"); 
    } 
}  

class Students extends Parent 
{ 
    String name; 
    String address; 

    public Students(String name, String address) { 
     super(); 
     this.name = name; 
     this.address = address; 
    } 
} 

ВЫВОД: родительского конструктор класса привлеченного

Теперь убирают super();

class Students extends Parent 
{ 
    String name; 
    String address; 

    public Students(String name, String address) { 
     this.name = name; 
     this.address = address; 
    } 
} 

ВЫВОД: родительский конструктор класса вызывается

Точно так же как, как классы неявно распространяется на Object, даже если вы не продлевают их к чему-то. «По умолчанию» super(); будет вызываться в каждом конструкторе, если он не указан вами.

+0

Nice Пояснение @ user3437460 –

+0

@ Tarikhelian Рад, что это помогло;) – user3437460

Смежные вопросы