关于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!!")
}
}
希望这会有所帮助。您尝试时发生了什么?