Tag: 重载

在具有重载构造函数的类中传递null时首先调用哪个构造函数?

下面是具有3个重载构造函数的java类: public class Test { public Test(Object i){ System.out.println(“Object invoked”); } public Test(String i){ System.out.println(“String invoked”); } public Test(int k){ System.out.println(“Integer invoked”); } public static void main(String[] args) throws Exception { Test t = new Test(null); } } 如果在创建新的类实例时传递了null值,那么将调用哪个构造函数? 是什么原因 ?

JVM如何在函数重载的情况下找到要调用的方法(具有最接近匹配的参数)

JVM决定在编译时调用哪个重载方法。 我有一个例子: public class MainClass{ public static void go(Long n) {System.out.println(“takes Long “);} public static void go(Short n) {System.out.println(“takes Short “);} public static void go(int n) {System.out.println(“takes int “);} public static void main(String [] args) { short y = 6; long z = 7; go(y); go(z); go((Short)y); } } 根据我的理解,它应该打印以下内容: takes Short takes Long takes […]

叫哪种方法? (整数… a)vs.(int a,int b)

我刚刚发现了一个非常有趣的Java技巧: void method1(Integer… a){ } 因此,您可以根据需要为此方法提供尽可能多的整数。 现在,如果我有一个类似的(重载)方法,如下所示: void method1(int a, int b){ } 执行以下行时运行哪个方法: method1(1, 2); 好吧,我可以通过使用不同的方法指令测试它很容易找到它但是当我考虑“重载”方法中的“规则”时,我必须确保每个重载方法必须相同,以便编译器知道究竟要使用哪一个。 在我看来,上面的代码不应该工作,因为编译器应该混淆。 但是,当我尝试它时,它的工作原理。 那么..有没有人知道更多关于此的背景信息?

Java中的重载和隐藏方法

我有一个带有public insert()方法的抽象类BaseClass: public abstract class BaseClass { public void insert(Object object) { // Do something } } 这是由许多其他类扩展。 但是,对于其中一些类, insert()方法必须具有其他参数,以便它们不会覆盖它,而是使用所需的参数重载基类的方法,例如: public class SampleClass extends BaseClass { public void insert(Object object, Long param){ // Do Something } } 现在,如果我实例化SampleClass类,我有两个insert()方法: SampleClass sampleClass = new SampleClass(); sampleClass.insert(Object object); sampleClass.insert(Object object, Long param); 我想要做的是隐藏基类中定义的insert()方法,以便只显示重载: SampleClass sampleClass = new SampleClass(); […]

重载构造函数调用其他构造函数,但不作为第一个语句

我在java中使用多个构造函数时遇到了一些麻烦。 我想做的是这样的: public class MyClass { // first constructor public MyClass(arg1, arg2, arg3) { // do some construction } // second constructor public MyClass(arg1) { // do some stuff to calculate arg2 and arg3 this(arg1, arg2, arg3); } } 但我不能,因为第二个构造函数不能调用另一个构造函数,除非它是第一行。 这种情况的常见解决方案是什么? 我无法计算arg2和arg3“在行”。 我想可能会创建一个构造辅助方法,它将进行实际构造,但我不确定它是如此“漂亮”…… 编辑 :使用辅助方法也是有问题的,因为我的一些字段是最终的,我不能使用辅助方法设置它们。

Java构造函数重载

我是Java的新手,我无法理解构造函数问题,我已经看了很多教程,但我仍然很难理解为什么我们使用构造函数,无论如何,我的具体问题是: 如果我错了,请纠正我,如果我想在我的类中添加多个构造函数,我将编写第一个,第二个将是int类型(在括号内)。 是因为构造函数必须与类同名,我们需要区分它们吗? 如果我想添加第三个构造函数怎么办? 它也可以是int类型吗?

Java转换为超类并调用重载方法

abstract class A { int met(A a) { return 0; } int met(B b) { return 1; } int met(C c) { return 2; } } class B extends A { int met(A a) { return 3; } int met(B b) { return 4; } int met(C c) { return 5; } } class C […]

使用“null”引用调用重载函数

让我们说我有以下重载函数 public class Test { public static void funOne(String s){ System.out.print(“String function”); } public static void funOne(Object o){ System.out.print(“Object function”); } public static void main(String[] args) { funOne(null); } } 为什么funOne(null)使用String参数签名调用该方法? 这里重载的优先级是什么?

Java中的自动类型转换?

有没有办法在Java中进行自动隐式类型转换? 例如,假设我有两种类型,’FooSet’和’BarSet’,它们都是Set的表示。 在类型之间转换很容易,因此我编写了两个实用方法: /** Given a BarSet, returns a FooSet */ public FooSet barTOfoo(BarSet input) { /* … */ } /** Given a FooSet, returns a BarSet */ public BarSet fooTObar(FooSet input) { /* … */ } 现在说我想调用这样的方法: public void doSomething(FooSet data) { /* .. */ } 但我所拥有的只是一个BarSet myBarSet …它意味着额外的输入,如: doSomething(barTOfoo(myBarSet)); 有没有办法告诉编译器某些类型可以自动转换为其他类型? 我知道这可以在C ++中进行重载,但我找不到Java的方法。 我想能够输入: […]

使用varargs重载function

这不会编译: public class Methods { public static void method(Integer… i) { System.out.print(“A”); } public static void method(int… i) { System.out.print(“B”); } public static void main(String args[]) { method(7); } } 这将编译和工作: public class Methods { public static void method(Integer i) { System.out.print(“A”); } public static void method(int i) { System.out.print(“B”); } public static void main(String […]