0

Le code suivant est correct en ce qui concerne la surcharge de méthode.Méthode de surcharge: conversion automatique du type de données

public class class7A { 
    public static void main(String[] args) { 
    testing obj_1 = new testing(); 
    int a=12,b=14,c=20; 
    obj_1.func1(a,b,c); //invokes the 3rd method in the testing class 
             } 
         } 

class testing{ 
void func1(int a,int b){ 
    System.out.println("The values of length and breadth entered for the box is "+a+" "+b); 
         } 
void func1(int a){ 
    System.out.println("We can only talk about length here folks which is "+a); 
       } 
void func1(double a,double b,double c){ //This method is invoked 
    System.out.println("The value of length ,breadth and height is "+a+","+b+","+c+" respectively"); 
             } 
      } 

Maintenant, l'explication donnée par le fait que la 3ème méthode est appelée, même lorsque les paramètres définis pour la 3ème méthode sont « double » est que java convertit automatiquement en deux int here.I sait aussi java toute opération ne sur le type primitif en convertissant d'abord les types en int à l'extrémité arrière qui est également vrai pour les octets. Cependant quand je change les paramètres de la 3ème méthode pour être de type octet au lieu de double, le code donne une erreur. Par exemple le code ci-dessous donne une erreur:

Pourquoi cela se passe-t-il donc?

public class class7A { 
    public static void main(String[] args) { 
    testing obj_1 = new testing(); 
    int a=12,b=14,c=20; 
    obj_1.func1(a,b,c); 
             } 
         } 

class testing{ 
void func1(int a,int b){ 
    System.out.println("The values of length and breadth entered for the box is "+a+" "+b); 
         } 
void func1(int a){ 
    System.out.println("We can only talk about length here folks which is "+a); 
       } 
void func1(byte a,byte b,byte c){ //This gives error 
    System.out.println("The value of length ,breadth and height is "+a+","+b+","+c+" respectively"); 
+0

* "java convertit automatiquement le double en int ici" * Non, il ne le fait pas – Tom

+0

@Tom, si cela ne peut pas vous expliquer, pourquoi les arguments int fonctionnent pour les paramètres définis comme étant de type "double"? –

+0

Regardez simplement ___votre propre code ___. Pourquoi devrait-il convertir double en int, quand int est le type source et double le type cible? Cela n'a aucun sens de reculer en arrière. – Tom

Répondre

0

Vous devez convertir le type de données int en octet lorsque vous passez en argument de la méthode.

exemple:

public class class7A { 
    public static void main(String[] args) { 
     testing obj_1 = new testing(); 
     int a = 12, b = 14, c = 20; 

     obj_1.func1((byte) a, (byte) b, (byte) c); 
    } 
} 

class testing { 
    void func1(int a, int b) { 
     System.out.println("The values of length and breadth entered for the box is " + a + " " + b); 
    } 

    void func1(int a) { 
     System.out.println("We can only talk about length here folks which is " + a); 
    } 

    void func1(byte a, byte b, byte c) { // This gives error 
     System.out.println("The value of length ,breadth and height is " + a + "," + b + "," + c + " respectively"); 
    } 
} 

et si vous voulez faire un autre type de conversion, vous pouvez vérifier ce poste où il est expliqué plus en détail comment convertir int en octets

https://stackoverflow.com/a/842900/7179674