【问题标题】:Constructor overloading java构造函数重载java
【发布时间】:2021-07-24 20:06:30
【问题描述】:

Java如何决定在下面的程序中调用哪个构造函数?

public class Test   
{  
    Test(int a, int b)  
    {  
        System.out.println("a = "+a+" b = "+b);  
    }  
    Test(int a, float b)  
    {  
        System.out.println("a = "+a+" b = "+b);  
    }  
    public static void main (String args[])  
    {  
        byte a = 10;   
        byte b = 15;  
        Test test = new Test(a,b);  
    }  
}  

第一个以第二个参数为int的构造函数被调用,但是如果我删除第一个构造函数,那么另一个构造函数被调用。如果两个构造函数都存在,为什么要调用第一个?

【问题讨论】:

    标签: java constructor type-conversion output implicit-conversion


    【解决方案1】:

    在第一种情况下,两个byte 参数都扩展为int,这比将一个参数转换为float 更好。

    在第二种情况下,没有构造函数采用两个ints,因此唯一可能的选择涉及转换。

    语言定义文档包含对构造函数解析的详尽讨论。

    【讨论】:

    • 自动转换是一步一步来的吗,比如把byte转成int,看是否匹配,如果不匹配,把byte转成float?
    • 我强烈建议您阅读语言规范。在这里重写它没有意义,因为已经有一个容易获得的规范描述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多