java中函数重载的模糊性
因为返回类型在函数重载中不起任何作用,编译器只检查调用时使用的代码部分的唯一存在性 那么为什么这个代码不包含错误呢java中函数重载的模糊性,java,Java,因为返回类型在函数重载中不起任何作用,编译器只检查调用时使用的代码部分的唯一存在性 那么为什么这个代码不包含错误呢 class Temp{ Temp(){ System.out.println("Default Constructor"); } void Temp(){ S.o.p("HEll"); } public static void main(String a[]){ new Temp(); } } 输出=默认构造函数// 我很震惊没有
class Temp{
Temp(){
System.out.println("Default Constructor");
}
void Temp(){
S.o.p("HEll");
}
public static void main(String a[]){
new Temp();
}
}
输出=默认构造函数//
我很震惊没有编译时错误,因为复制者只检查调用时使用的代码部分,这意味着编译器只需要检查Temp()的唯一存在,而Temp()的唯一存在
请详细说明,因为void Temp()
是一个方法,您应该在实例中调用它。允许使用类的名称声明方法,但调用不同。只能使用new
运算符调用构造函数
您可以在中阅读有关构造函数的更多信息
方法调用表达式从不调用构造函数(§15.12)
这里您应该注意的主要区别是构造函数没有返回类型,重载的定义包括返回类型。因为void Temp()
是一个方法,您应该在实例上调用它。允许使用类的名称声明方法,但调用不同。只能使用new
运算符调用构造函数
您可以在中阅读有关构造函数的更多信息
方法调用表达式从不调用构造函数(§15.12)
这里您应该注意的主要区别是构造函数没有返回类型,重载的定义包括返回类型。不需要返回类型,void Temp()
将被视为方法而不是构造函数
调用void Temp()时代码>,将调用不带参数的构造函数。不需要返回类型,void Temp()
将被视为方法而不是构造函数
调用void Temp()时代码>,将调用没有参数的构造函数。一个是构造函数,另一个不是。一个是构造函数,另一个不是。编译器使用关键字new
区分方法调用和构造函数调用。只有构造函数可以位于关键字new
之后。编译器使用关键字new
区分方法调用和构造函数调用。只有构造函数可以位于new
关键字之后。类、方法和字段位于不同的命名空间中。编译器始终可以确定使用的构造,并轻松区分new Temp()
(类)与o.Temp()
(方法)和o.Temp
(字段)。类、方法和字段位于不同的名称空间中。编译器始终可以确定所使用的构造,并轻松区分new Temp()
(类)与o.Temp()
(方法)和o.Temp
(字段)。使用Eclipse,您可以避免这种用法:
请参见使用Eclipse时“应用”按钮上方的一行,您可以避免这种用法:
请参见“应用”按钮上方的行此处没有重载。一个是构造函数,另一个是方法。这里没有重载。一个是构造函数,另一个是方法。但编译器会检查Temp()是否存在,如果我们不添加Temp(),编译器也会这样做,如果谈论方法重载的概念,仍然会检查Temp()是否唯一存在…我知道编译器区分方法和构造函数这一事实..我的疑问是,在构造函数和方法重载条件下,编译器是如何做的,但编译器会检查Temp()是否存在,如果我们不添加Temp(),编译器也会这样做,如果谈论方法重载的概念仍然是为了Temp()的唯一存在……我知道编译器区分方法和构造函数这一事实……我的疑问是在构造函数和方法重载条件下是如何做到的。是的,我们可能会编写类似Type=new Type()的恐怖代码;是的,我们可以写一些恐怖的东西,比如Type=newtype();