繁体   English   中英

关于Java中的方法重载

[英]About Method Overloading in Java

方法重载只能在同一类中进行吗? 还是可以在子类中进行?

子类中对重载没有任何限制。 例如,我可能有:

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!!")
   }
} 

希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM