【问题标题】:why should we widen the accessibility of overridden methods?为什么我们应该扩大覆盖方法的可访问性?
【发布时间】:2012-04-21 20:33:56
【问题描述】:

为什么我们应该扩大覆盖方法的可访问性?如果超类具有受保护的方法,而子类具有与公共相同的方法。为什么会发生?

【问题讨论】:

标签: java


【解决方案1】:

这是一种不同的方法!子类不继承私有方法!所以你根本没有“压倒一切”。您只是在定义一个与超类中的私有方法同名的方法。

 class A
   {
      private void myMethod() { }
   }

 class B extends A
   {
     public void myMethod() { } // a completely different method. Has nothing to do with the above method. It is not an override. 
   }

【讨论】:

    【解决方案2】:

    因为在对象层次结构中,JVM 总是会运行 Overriden 方法。如果您的覆盖方法不可访问,那么它是无用的。

    public class A{
        void A(){}
    }
    public class B extends A{
        private void A(){} //this makes no sence and its impossible
        PSV main(String ..){
            A a = new B();
            a.A(); //error as JVM cannot call overriden method which is private.
        }
    }
    

    【讨论】:

      【解决方案3】:

      声明为私有或静态的方法不能被覆盖!

      注解@Override 表示方法声明旨在覆盖超类中的方法声明。如果使用此注解类型对方法进行注解但未覆盖超类方法,则编译器需要生成错误消息。

      每次重写方法时使用它有两个好处。这样,如果您犯了拼写错误的方法名称或未正确匹配参数的常见错误,您将被警告您的方法实际上并没有像您认为的那样覆盖。其次,它使您的代码更容易理解,因为当方法被覆盖时它会更加明显。 在 Java 1.6 中,您可以使用它来标记方法何时实现接口以获得相同的好处。

      【讨论】:

        猜你喜欢
        • 2011-07-09
        • 1970-01-01
        • 1970-01-01
        • 2015-03-12
        • 1970-01-01
        • 2011-09-08
        • 1970-01-01
        • 2019-12-11
        相关资源
        最近更新 更多