Наследование Java - нет конструктора по умолчанию [duplicate]

Самое простое решение - создать функцию JavaScript и вызвать его для обратного вызова Ajax success.

function callServerAsync(){
    $.ajax({
        url: '...',
        success: function(response) {

            successCallback(response);
        }
    });
}

function successCallback(responseObj){
    // Do something like read the response and show data
    alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}

function foo(callback) {

    $.ajax({
        url: '...',
        success: function(response) {
           return callback(null, response);
        }
    });
}

var result = foo(function(err, result){
          if (!err)
           console.log(result);    
}); 
46
задан arshajii 12 June 2013 в 15:45
поделиться

6 ответов

Используйте конструктор super:

public Bar(int a, double b, ...) {
    super(a, b, ...);
}
56
ответ дан arshajii 5 September 2018 в 08:33
поделиться

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

public Bar(int x,int y) {
    super(x,y);
}
0
ответ дан Aniket Thakur 5 September 2018 в 08:33
поделиться

Задача решается следующим образом:

class Foo{
       Foo(int a, int b){}
}

class Bar extends Foo{
         //Here must be a constructor OR declare a constructor in Foo without parameters
         Bar(){super(1,1)} //this is an example

}

Другое решение:

class Foo{
   Foo(int a, int b){}
   Foo(){}
}

class Bar extends Foo{
}

Помните, что если у конструктора есть параметры с SuperClass (в этом случае Foo ), неявный конструктор на дочернем классе (в данном случае Bar) всегда будет иметь неявный вызов в «Super ()» (всегда должен быть один, если явно).

2
ответ дан Gaston Flores 5 September 2018 в 08:33
поделиться
15
ответ дан Jon Skeet 5 September 2018 в 08:33
поделиться

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

Обратите внимание: это не означает, что для классов детей необходимо иметь точный тот же конструктор, что и базовый класс. Например, это совершенно верно:

class Foo {

    protected int a;
    protected int b;

    protected Foo(final int a, final int b) {
        this.a = a;
        this.b = b;
    }
}

class Bar extends Foo {

    protected Bar() {
        super(0,0);
    }
}
3
ответ дан m0skit0 5 September 2018 в 08:33
поделиться

Если параметры не требуются и / или имеют значения по умолчанию, вы можете определить конструктор по умолчанию (без параметров):

class Foo
{
    public final int DEFAULT_A = 42;
    protected int a;
    protected int b;

    public Foo(final int a, final int b)
    {
        this.a = a;
        this.b = b;
    }

    // Is equal to new Foo(Foo.DEFAULT_A, 0);
    public Foo()
    {
        this.a = this.DEFAULT_A;
    }

}

class Bar extends Foo {}

class PiBar extends Bar
{
    public final int DEFAULT_A = Math.PI;

}
0
ответ дан MonLiH 5 September 2018 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: