Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
// пример вызовет ошибку компиляции
// объявляем перегруженные методы // с аргументами (byte, int) и (short, short) int m(byte a, int b) {return a+b;} int m(short a, short b) {return a-b;}
void main() {
print(m(12, 2)); // ошибка компиляции!
В этом примере компилятор выдаст ошибку, так как при вызове аргу. менты имеют тип (int, int), а метода с такими параметрами нет. Если бы компилятор проводил преобразование для целых величин, подобно ситуации с присвоением значений, то пример стал бы корректным, но пришлось бы прилагать дополнительные усилия, чтобы указать, какой из двух возможных перегруженных методов хотелось бы вызвать.
Аналогичное преобразование потребуется при возвращении значения из метода, если тип результата и заявленный тип возвращаемого значения не совпадают.
long get() { return 5;
}
Хотя в выражении return указан целочисленный литерал типа int, во всех местах, где будет вызван этот метод, будет получено значение типа long. Для такого преобразования действуют те же правила, что и для присвоения значения.
В заключение рассмотрим пример, включающий в себя все рассмотренные случаи преобразования:
short get(Parent р) {
return 5+'А'; // приведение при возвращении значения
}
void maino {
long а = // приведение при присвоении значения get(new ChildO); // приведение при вызове метода
}
Явное приведение
Явное приведение уже многократно использовалось в примерах-При таком преобразовании слева от выражения, тип значения которого необходимо преобразовать, в круглых скобках указывается целевой тип. Если преобразование пройдет успешно, то результат будет точно указанного типа. Примеры:
(Ьуте)5
(Рагепт)пе\л/ СЫЩ)
(Р1а^детСпу().дет3^ееф.деШои5е().дегР1а1()
Если комбинация типов образует запрещенное преобразование, розникает ошибка компиляции. Допускаются тождественные преобразования, расширения простых и объектных типов, сужения простых и объектных типов. Первые три всегда выполняются успешно. Последние два щогут стать причиной ошибки исполнения, если значения оказались несовместимыми. Как следствие, выражение null всегда может быть успешно дреобразовано к любому ссылочному типу.
Но можно найти способ все-таки закодировать запрещенное преобразование.