【问题标题】:Can we take private methods and final methods are same我们可以采用私有方法和最终方法相同吗
【发布时间】:2014-05-26 02:03:24
【问题描述】:

据我了解,私有方法和最终方法是相同的。 Java 编译器在编译时确定私有方法的含义。私有方法和最终方法都不能在运行时修改,也不能被覆盖。这些相似之处使得私有方法和最终方法看起来是相同的。这是真的吗?

【问题讨论】:

  • 停止投票..请..请断定两者是否相同..?
  • 不,它们不一样。我提供的链接给出了一个具体的例子来解释。
  • 如果措辞更清晰,这可能是一个更好的问题。你的意思是,“私有方法实际上都是最终的吗?”

标签: java private final


【解决方案1】:

私有方法自动是最终的,并且对其派生类隐藏。 final 类不会对其派生类隐藏。因此,您可以创建一个与私有方法同名的新类,例如

class test {
    private void works {
    }
}
class tester extends test {
    private void works {
    }
}

但你不能创建一个与最终方法同名的新类

/*----------Doesn't Work------------*/
class test {
    final void dWorks {
    }
}
class tester extends test {
    final void dWorks {
    }
}

示例和答案在这里:http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ309_006.htm

【讨论】:

    【解决方案2】:

    考虑以下示例:

    class Super {
    
        private void foo(){}
    
        final void bar(){}
    
    }
    
    class Sub extends Super {
    
        private void foo(){}
    
        final void bar(){}
    
    }
    

    使用foo() 方法不会有问题,但是在尝试编译bar() 方法时会遇到编译问题。这是因为 bar() 方法无法被覆盖,但 foo() 方法只是不可见 - 所以不会发生覆盖。

    您可以在此处查看更多答案:Overriding private methods in Java

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 2010-11-20
      • 2017-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2019-10-12
      相关资源
      最近更新 更多