Поэтому в java у вас не может быть дубликатов имен методов с разными значениями возврата и params?

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

почему бы не быть способным..

int getVal() {
return int;
}
boolean getVal() {
return true;
}
setVal(int a) {
}

и

setVal(boolean a) {
}
8 ответов

Потому что тогда компилятор не смог бы выяснить:

setVal(getVal());

должен ли он вызвать версию bool или int?


Что вы ожидаете, если я позвоню:

getVal();

без возврата вауа? У вас есть два варианта: логический или целочисленный. Поскольку вы не можете обеспечить возвращаемое значение, которое необходимо собрать, компилятор не может определить, какой вариант будет вызываться.

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


На первый взгляд может показаться, что не должно быть причин, по которым не должно быть позволено это делать, но подумайте об этом с точки зрения кода, который должен назвать этот (и) метод (ы), как бы он знает, какой метод вызывать?

От java.sun.com

Язык программирования Java поддерживает методы перегрузки, а Java может различать методы с разными сигнатурами методов. Это означает, что методы внутри класса могут иметь одно и то же имя, если они имеют разные списки параметров (есть некоторые квалификации для этого, которые будут обсуждаться в уроке под названием "Интерфейсы и наследование" ).

Перегруженные методы дифференцируются по числу и типу аргументов, переданных в метод.

Вы не можете объявить несколько методов с тем же именем и одинаковыми числами и типами аргументов, , потому что компилятор не может сообщить им apar t.

Компилятор не рассматривает тип возвращаемого значения при дифференцировании методов, поэтому вы не можете объявлять два метода с одной и той же сигнатурой, даже если они имеют другой тип возвращаемого значения.


Что касается Java Virtual Machine, то класс может объявлять несколько методов с одной и той же сигнатурой, но с разными типами возвращаемых данных.

Только, Java как язык запрещает это.


Вообще говоря - нет. Но если вы этого очень хотите - тогда ДА:)) Проверьте отличную статью


Различные типы возврата, нет. Но разные типы параметров/длина, да. Это говорит о том, что Java... спецификация. Они хотели, чтобы это было просто.


Вы можете объявить два сеттера в своем случае - попробуйте.

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


В соответствии с Спецификацией языка Java (http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.html#8.4.2):

Это ошибка времени компиляции для объявления двух методов с переопределенные эквивалентные сигнатуры (определенные ниже) в классе.

Два метода имеют одну и ту же подпись, если они имеют одинаковое имя и типы аргументов.

licensed under cc by-sa 3.0 with attribution.