我知道Java方法可以在同一个类或子类中重载。但是我可以在非子类中重载Java静态方法吗?我对下面的代码有点困惑。class A {
public static void main(String[] args) {
System.out.println("Inside main's (String[]) method");
}}class B {
public static void main(int[] args) { // [1, 2, 3]
System.out.println("Inside main's (int[]) method");
}}public class _2b_Overloading_Staticmethod_NonSubClass {
// JVM's entry point
public static void main(String[] args) {
A.main(args);
B.main(new int[]{1,2,3});
}}
2 回答

忽然笑
TA贡献1806条经验 获得超5个赞
另外,还有一些来自JLS的备份,加上一堆例子。
超载
来自JLS§8.4.9:
如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等效的,那么方法名称就是超载。
这对静态成员来说很重要......
class Foo { static int someStaticMethod(String s) { return 0; } static int someStaticMethod(String s, boolean b) { return 0; }}
......以及非静态的:
class Foo { int someMethod(String s) { return 0; } // Method overloading int someMethod(String s, boolean b) { return 0; }}
如果一个类从另一个类继承一个方法,也会出现重载:
class Bar extends Foo { // This is also a case of overloading, because Bar inherits // someMethod(String) from Foo int someMethod(String s, double d, boolean b) { return 0; }}
但
如果两种方法都不相关,尽管名称相同,但它们永远不会被称为超载。
这是两种非静态方法的情况
class Alpha { void anotherMethod(String s) { }}class Bravo { // No overloading involved void anotherMethod(boolean b) { }}
以及静态方法:
class Charlie { static void someThirdMethod(String s) { }}class Delta { // No overloading involved static void someThirdMethod(boolean b) { }}
对于静态成员,如果其中一个类继承了另一个,则情况甚至如此:
class Echo { static void lastMethod(String s) { }}class Foxtrot extends Echo { // No overloading involved. Static members are never inherited, // so effectively, these two methods are unrelated static void lastMethod(boolean b) { }}
添加回答
举报
0/150
提交
取消