为什么在Java中隐藏一个不好的做法

时间:2018-04-12 17:18:35

标签: java

嗯,问题不在于什么是方法或变量隐藏。 问题是为什么不鼓励使用它。

如果某人没有静态和动态绑定,那么一切似乎都是合乎逻辑的。我同意静态变量和方法应该由类名调用,而不是通过对象引用来使代码易于理解,但为什么这种隐藏的做法不鼓励呢?

是不是因为代码变得更容易阅读,还是其他东西?

2 个答案:

答案 0 :(得分:0)

重写静态方法没有多大意义,因为覆盖是针对多态的事情,但是当你调用方法时,你不是操纵对象而是操作类。 因此,它可能会以非静态方式执行它,并且您将受到声明变量的类型而不是它的实例。

答案 1 :(得分:0)

我对这里的文档非常满意(感谢@baao):https://docs.oracle.com/javase/tutorial/java/IandI/override.html

注意隐藏和覆盖之间的区别: - 隐藏是指子类中的静态方法,与超类中的静态方法具有相同的签名,被认为是不好的做法 - 覆盖是允许子类修改继承行为的原因,并且不是不好的做法。

我将再次使用文档中的示例:

public class Animal {
    public static void testClassMethod() {
        System.out.println("The static method in Animal");
    }
    public void testInstanceMethod() {
        System.out.println("The instance method in Animal");
    }
}

public class Cat extends Animal {
    public static void testClassMethod() {
        System.out.println("The static method in Cat");
    }
    public void testInstanceMethod() {
        System.out.println("The instance method in Cat");
    }

    public static void main(String[] args) {
        Cat myCat = new Cat();
        Animal myAnimal = myCat;
        myAnimal.testClassMethod();
        // "The static method in Animal"
        myAnimal.testInstanceMethod();
        // "The instance method in Cat"
    }
}

What is method hiding in Java? Even the JavaDoc explanation is confusing引用另一个答案: "在实例而不是类上调用静态方法是一种非常糟糕的做法,永远不应该这样做。"