【问题标题】:What is the difference between the keyword 'Private' and 'Final'?关键字“Private”和“Final”有什么区别?
【发布时间】:2015-07-28 15:20:40
【问题描述】:

在 PHP 中 PrivateFinal 之间存在混淆。

例如我有 3 个类:

  1. A 类(父类)
  2. B 类(子类)
  3. C 类(其他类)

我的理解:

  • A:Public变量和方法可供A类、B类和C类访问
  • B:私有变量和方法只能由 A 类访问。
  • C:受保护的变量和方法只能由 A 类和 B 类访问
  • D:Final 方法只能由 A 类访问,B 类不能访问。

我的问题是:

使用private后我们可以实现类似final的功能,那为什么要使用final呢?

我问这个问题只是为了我自己的澄清。

【问题讨论】:

  • RTM 如果可见性不是私有的,则子类可以访问最终方法。您只是不能在子类中覆盖它们。所以不同的是最终方法仍然可以被其他类访问,具体取决于可见性,但你不能像普通方法一样覆盖它们
  • 表示a类的final方法b类不能访问,c类可以访问。
  • 这取决于它的可见性。关键字 final 不会改变该方法的任何可访问性。它只定义另一个类是否可以覆盖它(当它可以访问它时)。但是访问是由他们的关键字定义的:privatepublicprotected
  • 知道了,非常感谢 :-)
  • 不客气,我应该把它转换成答案吗?

标签: php oop methods visibility final


【解决方案1】:

方法的属性final 用于向编译器说明不能在其他地方覆盖给定方法。

因此,如果我们将函数声明为final,然后尝试在其他地方覆盖它,我们将得到warningfatal error

【讨论】:

    【解决方案2】:

    最终的类或方法不能被覆盖。

    来自 php 文档

    PHP 5 引入了 final 关键字,它通过在定义前加上 final 来防止子类覆盖方法。如果类本身被定义为 final 则不能扩展。

    来自 php 文档的示例:

    <?php
    class BaseClass {
       public function test() {
           echo "BaseClass::test() called\n";
       }
    
       final public function moreTesting() {
           echo "BaseClass::moreTesting() called\n";
       }
    }
    
    class ChildClass extends BaseClass {
       public function moreTesting() {
           echo "ChildClass::moreTesting() called\n";
       }
    }
    // Results in Fatal error: Cannot override final method BaseClass::moreTesting()
    ?>
    

    更多详情:http://php.net/manual/en/language.oop5.final.php

    【讨论】:

      【解决方案3】:

      为了清楚起见,关键字final 与方法的可见性无关。方法的可见性由以下关键字定义:publicprotectedprivate

      final 关键字定义了另一个类是否可以覆盖该方法(如果一个方法是最终的,则它不能被另一个类覆盖),当另一个类可以访问该方法时。否则它甚至无法访问该方法,因此它既不能使用/调用该方法,也不能覆盖它。

      也只有方法可以是最终的,它不能与属性一起使用。


      A、B 和 C 是正确的,正如我上面所说的关键字 final 与可见性没有任何关系,所以 D 不正确。


      有关更多信息,请参阅相应的手册页:

      【讨论】:

        猜你喜欢
        • 2020-04-25
        • 2018-10-30
        • 1970-01-01
        • 2017-09-14
        • 2017-05-29
        • 2012-11-04
        • 1970-01-01
        • 2019-04-05
        相关资源
        最近更新 更多