Метод перегрузка и выбор параметров NULL
в Java, когда метод перегружен, существует несколько методов с одинаковым именем, но разными списками параметров. Когда будет вызыв метод, компилятор определяет, какой перегруженный метод вызывает на основе числа и типов принятых аргументов. public void метод (объект o) { System.out.println ("Object Verion"); } Public void Method (String S) { System.out.println ("String Version"); } public static void main (String args []) { MoneyCalc Вопрос = новый MoneyCalc (); Вопрос.method (null); } }
Вопрос:
public class MoneyCalc { public void method(Object o) { System.out.println("Object Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
ответ:
В Java Null является специальной константной стоимостью, которая представляет собой ссылку на объект, который не существует. Это не значение какого -либо конкретного типа, но он может быть назначен переменной любого типа ссылки, включая объект и строку. , когда вызов метода выполняется с помощью NULL в качестве аргумента, компилятор выбирает версию метода (строка), потому что он более конкретный, чем версия метода (объект). Согласно спецификации языка Java (JLS), наиболее специфическая перегрузка выбирается на основе его применимости и специфичности.
применимость относится к тому, могут ли аргументы быть переданы в метод без ошибки во времени компиляции. В этом случае NULL применим к обоим методам, поскольку его можно присвоить переменным типам объектов и строк.
измеряет специфичность, насколько специализирован метод для данных аргументов. В этом случае перегрузка метода (строки) более конкретна, потому что он предназначен для обработки аргументов только типа строки. Перегрузка метода (объект) более общая, поскольку он может обрабатывать аргументы объекта типа или любые его подклассы.
, поэтому компилятор выбирает версию метода (строка) как более конкретный и применимый к предоставленному аргументу, который является нулевым ссылкой. MoneyCalc Class, произойдет ошибка компиляции. Это связано с тем, что ни метод (строка), ни метод (StringBuffer) не были бы более конкретными, чем другой в этом случае, что приводит к неоднозначности в выборе метода.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3