【问题标题】:Overloading methods in Java? [closed]Java中的重载方法? [关闭]
【发布时间】:2023-03-02 21:56:02
【问题描述】:

我对 Java 还是有点陌生​​,我可以对这段代码使用一些帮助,到目前为止,我编写了方法以及每个方法应该做什么,但老实说,我不知道如何实现重载效果并使其工作所以我会很感激一个简单的解释。

import java.util.Scanner;
public class Assignment3 {
static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
    // TODO Auto-generated method stub
    myMethod();
}
public static void myMethod(){
    System.out.println("Welcome to Java 1 ");

}
public static void myMethod(String msg, int counter){
    System.out.println("Enter your custom messege please: ");
    msg = input.nextLine();

    System.out.println("Please enter how many times do you wish to print the messsege: ");
    counter = input.nextInt();

    for (int i = 0; i <= counter; i++){
        System.out.println(msg);
    }
}
public static void myMethod(int lowerLimit, int upperLimit){

    System.out.println("Please enter a lowerlimit: ");
    lowerLimit = input.nextInt();

    System.out.println("Please enter an upperlimit: ");
    upperLimit = input.nextInt();

    System.out.println("Press 1 for ascending order: ");
    System.out.println("Press 2 for descending order: ");
    System.out.println("Make your selection");
    int user1 = input.nextInt();
    System.out.println("How frequent do you wish the messege to be printed");
    int interval = input.nextInt();

    switch(user1){
    case 1:
        for(int counter = lowerLimit; counter <= upperLimit; counter += interval){
            System.out.println(counter);
        }
        break;
    case 2:
        for(int counter = upperLimit; counter <= lowerLimit; counter -= interval){
            System.out.println(counter);
        }
        break;
        default :
            System.out.println("Something went wrong !!!");
    }

}
public static void myMethod(double number1, double number2){

    number1 = (Math.random() * 100);
    number2 = (Math.random() * 100);
    double product = (number1 * number2);

    System.out.println("The product of " + number1 + " and " + number2 + " is " + product);
}
]

【问题讨论】:

    标签: java class methods overloading


    【解决方案1】:

    您的myMethod 方法已经重载。重载方法只是一种可以接受两组或更多组不同参数的方法。 (见https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html

    例如:

    public void foo(int a) {
      System.out.println("Printing out the int " + a);
    }
    
    public void foo(double a) {
      System.out.println("Printing out the double " + a);
    }
    

    Foo 有两种可能的参数集,一种接受int,另一种接受double。现在,如果你这样做:

    int a = 10;
    double b = 10.5;
    
    foo(a);
    foo(b);
    

    它会返回:

    Printing out the int 10
    Printing out the double 10.5
    

    【讨论】:

    • 我要补充一点,这适用于 staticinstance 方法(OP 具有静态方法)。还提供来自 Oracle 文档或 Java 语言规范的链接。
    • 谢谢先生您的回复,但我想我没有正确解释我的问题。这段代码缺少负责通过函数调用方法的部分,因为我不知道如何告诉编译器调用负责特定函数的方法,我只能从这段代码中得到尝试运行时显示消息:Welcome to java 1
    • 那是因为它是你的主方法中唯一被调用的方法:myMethod(); !其他方法永远不会被调用
    【解决方案2】:

    回应您的评论:

    您只需要在 main 中调用另外两个“myMethod”,并使用它们各自的签名:

        public static void main(String[] args) {
            // Call without argument
            myMethod();
    
            // Call with String and integer
            myMethod("test", 42);
    
            // Call with Integer and Integer
            myMethod(42, 666);
        }
    

    然后将调用正确的。这能回答你的问题吗?

    【讨论】:

    • 非常感谢,这确实有助于解释和修复代码,我想我需要更多的练习和挖掘来完善它。再次感谢大家
    【解决方案3】:

    上面的帖子有你的答案,你的 myMethod 方法已经被重载,但是方法重载是一个允许一个类有两个或多个同名的方法,如果它们的参数列表不同的话。 您的方法接受具有不同数据类型的不同参数

    【讨论】:

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