2016-11-10 3 views
-2
class TestOverride{ 
    public int testVlaue(int a,int b){ 
     return a + b; 
    } 

    public float testValue(int x,int y){ 
     return x + y; 
    } 

    public float testValue(float x){ 
     return x; 
    } 
} 
public class CodeTester{ 
    public static void main(String a[]){ 
     TestOverride objTest = new TestOverride(); 
     System.out.println(objTest.testValue(2)); 
     System.out.println(objTest.testValue(2,3)); 
    } 
} 

Почему выход следующим образом?Метод переопределения в java с таким же числом параметров, но с другим типом возврата

2.0 
5.0 

Он может также взять тип возвращаемого значения int вместо float для возвращаемого значения 5?

+0

А как вы хотели действовать? Как Java должна знать, какую функцию вы хотите выполнить? Он выполняет первое совпадение. В принципе, такой тип программирования неверен на многих уровнях. –

+0

Не зарывайте свой quesiton в комментариях в коде. Неясно, что вы спрашиваете. – EJP

+1

@RDC, если вы собираетесь редактировать, редактировать. Исправьте все. Не один персонаж. – EJP

ответ

-1

Если вы хотите сделать перегрузку, вы должны изменить в сигнатуру метода для одного из этих пунктов:

  1. типы параметров.
  2. Количество параметров.
  3. Порядок параметров, объявленных в методе.

Тип возвращаемого не считается одним из сигнатуры методы, так что если у вас есть два метода с таким же именем и другим типом возвращаемого значения вы получите ошибку компиляции, это не разрешено делать это.

Последних, в вашем коде у вас есть два метода с другим именем, поэтому нет никакой ошибки компиляции и вызова метода, который вернется плавать

увидеть разные Вл и в

testVlaue
TestValue

вы называете System.out.println(objTest.testValue(2,3)); второй

+0

Вопрос о переопределении, а не перегрузке. – EJP

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