【问题标题】:Why is hiding a bad practice in Java为什么在 Java 中隐藏一个不好的做法
【发布时间】:2018-04-12 17:18:35
【问题描述】:

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

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

仅仅是因为这样代码变得更容易阅读还是其他原因?

【问题讨论】:

标签: java


【解决方案1】:

重写静态方法没有多大意义,因为虽然重写是针对多态性的,但是当您调用方法时,您不是在操作对象而是在操作类。 所以它可以让你以非静态方式执行它,你将受制于声明变量的类型,而不是它的实例。

【讨论】:

    【解决方案2】:

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

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

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

    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 的另一个答案: “在实例而不是类上调用静态方法是一种非常糟糕的做法,永远不应该这样做。”

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多