【问题标题】:About Method Overloading in Java关于 Java 中的方法重载
【发布时间】:2016-04-23 07:53:41
【问题描述】:

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

【问题讨论】:

  • 你尝试的时候发生了什么?

标签: java methods overloading overriding


【解决方案1】:

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

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");

对于此类问题,您可以随时自己尝试并找出答案。

【讨论】:

    【解决方案2】:

    总之——是的。您可以重载子类中的方法。例如:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2013-01-25
          • 2023-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多