Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java中的方法重载_Java_Methods_Overloading_Overriding - Fatal编程技术网

关于Java中的方法重载

关于Java中的方法重载,java,methods,overloading,overriding,Java,Methods,Overloading,Overriding,方法重载只能在同一个类中发生吗?或者它可以发生在子类中吗?子类中的重载没有限制。例如,我可以: public class A { public String test(String input) { //do something } } public class B extends A { public String test(String input, String input2) { //do something } } B testInstance = new B();

方法重载只能在同一个类中发生吗?或者它可以发生在子类中吗?

子类中的重载没有限制。例如,我可以:

public class A {
 public String test(String input) {
  //do something
 }
}

public class B extends A {
 public String test(String input, String input2) {
  //do something
 }
}

B testInstance = new B();
testInstance.test("one", "two");
testInstance.test("one");

对于这样的问题,你可以自己尝试并找出答案。

一句话——是的。可以在子类中重载方法。例如:

public class Parent {
    public void print(String s) {
        System.out.println("That was a string: " + s);
    }
}

public class Child extends Parent{
    public void print(int i) {
        System.out.println("That was an int: " + i);
    }
}

public class Main {
    public static void main(String[] args) {
        Child c = new Child();
        c.print("hello"); // prints "That was a string: hello"
        c.print(7); // prints "That was an int: 7"
    }
}

当你重载一个方法时,它基本上是在创建一个全新的方法,与另一个同名的方法没有直接关联,重要的是签名。
因此,如果您在子类中创建了一个具有不同签名的方法,编译器会将该方法视为该类的不同新方法,这样它就不会与超类的方法相关联。

在子类中可以实现重载。如果创建的方法与具有不同参数的超类中的方法同名,则该方法将被视为单独的方法。子类也将有来自超类的方法,所以在编译时根据参数类型决定调用哪个方法。要调用的方法是在编译时声明的,这就是为什么称之为静态多态性。这是一个例子-

Class A{
    void m1(int x){
        System.out.println("m1 in A");
    }
}
Class B extends A
{
   void m1(String str)
   {
       System.out.println("m1 in B");
   }
}
Public Class Test
{
   public static void main(String[] aa)
   {
       B b = new B();
       b.m1(10);
       b.m1("Hello World!!")
   }
} 

希望这会有所帮助。

您尝试时发生了什么?