2015-03-06 3 views
-3

В следующем коде целочисленное число отправляется в возвращаемый конструктор. Проблема в том, что когда значение задано как параметр в конструкторе, оно отказывается компилировать и выводить, что параметры не нужны.Функция Java отказывается принимать параметры

class test3 extends Value { 
    public static void main(String[] args) { 
    Value var = new Value(3); 
    System.out.println(var); 
    } 
} 
class Value { 
    public int Value(int num) { 
    return num; 
    } 
} 

Когда нет переданных параметров, он компилирует и выводит значение указателя.

[email protected] 

Что я делаю неправильно здесь (я пробовал использовать публичные классы, но это не работает)?

+0

Как вы думаете, что должно выводиться и почему? –

+3

Вы используете неправильный синтаксис для конструктора. –

+1

Конструктор не должен быть 'static' и не должен возвращать какое-либо значение. – jschultz410

ответ

1

Конструкторы используют форму visibility classname(params). В вашем случае, это было бы:

public Value(int num) {...} 

static не имеет смысла, потому что вы говорите о экземпляре класса, int не имеет смысла, потому что конструктор не возвращает ничего (неявно возвращает созданный объект).

3

Конструкторы в Java всегда имеют вид:

{visability} {ClassName}(/* arguments */) {/* body */}; 

Обратите внимание на отсутствие обратного типа. Конструкторы ничего не возвращают. Так что в вашем случае это должно быть:

public Value(int num) { /* do something with num */ } 
3

Constructors названы такое же имя, что и класс они находятся, но они никогда не имеют тип возвращаемого значения (даже void нет), и они не могут быть static. Если они имеют одно из них, то они интерпретируются как обычный метод. Затем Java поставляет конструктор no-arg по умолчанию, поэтому вы не можете отправлять никакие параметры в конструкторе и компилировать его.

  1. Удалить static и int.

    public Value(int num) { 
    

Ваш класс не переопределяет Object's toString() method, который отвечает за [email protected] выход вы видите. Вам нужно будет переопределить его, чтобы предоставить текст, который в конечном итоге будет выведен, когда вы передадите его System.out.println. Чтобы сделать это с любым значением:

  1. Сохраните значение в переменной экземпляра внутри класса.

    private int num; 
    public Value(int num) { 
        this.num = num; 
    } 
    
  2. Затем обратитесь к переменной экземпляра в toString().

    @Override 
    public String toString() 
    { 
        return String.valueOf(num); 
    } 
    

Кроме того, ваш test3 класс не должен распространяться Value; a test3 не является Value.

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