代码之家  ›  专栏  ›  技术社区  ›  Bissi singh

Java静态方法与重写[重复]

  •  -2
  • Bissi singh  · 技术社区  · 7 年前

    正在尝试处理有关方法重写的书籍中的示例。 代码有两个类Veggies和Pumpking。我唯一的困惑是,如果pumpkin的对象被分配给myveggie对象,为什么它调用veggies类的方法,因为该对象来自派生类。 我确信这与静态方法有关,但我可以得到更清楚的想法。

     class Veggies {
            public static void staticMethod(){
                System.out.println("Veggies static method");
            }
        public void instancemethod(){
            System.out.println("Veggies instance method");
        }
    }
    public class Pumpkin extends Veggies{
            public static void staticMethod(){
                System.out.println("Pumpkin static method");
            }
            @Override
            public void instancemethod(){
                System.out.println("Pumpkin instance method");
            }
            public static void main(String[] args) {
                Pumpkin myPumpkin=new Pumpkin();
                Veggies myveggie=myPumpkin;
                myveggie.staticMethod();
                myveggie.instancemethod();
    
            }
        }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Stephen C    7 年前

    关于这个问题:

    说明,在Java中不能重写静态方法。

    示例中的代码是通过实例调用静态方法的代码。这是不好的做法。

    实际上,变量的静态类型(不是引用!)在编译时解析为类。在这种情况下,类是 Veggies 。然后编译器插入对该类静态方法的调用;i、 e。 Veggies.staticMethod()

    这让人困惑。。。因为它看起来像你 应该 正在调度到与引用关联的静态方法。但这不是Java的工作方式。

    这就是为什么这是一种不好的做法,也是为什么许多IDE会警告您这一点。