为了账号安全,请及时绑定邮箱和手机立即绑定

我可以在非子类中重载Java静态方法吗?[等候接听]

我可以在非子类中重载Java静态方法吗?[等候接听]

陪伴而非守候 2019-04-18 14:15:35
我知道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) { }}



查看完整回答
反对 回复 2019-05-15
  • 2 回答
  • 0 关注
  • 599 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号