В чем разница между ключевыми словами «частный» и «конечный»?

Путаница между Private а также Final в PHP.

Например у меня есть 3 класса:

  1. Класс А (родительский класс)
  2. Класс B (детский класс)
  3. Класс C (другой класс)

Что я понимаю:

  • A: общественного переменные и методы доступны для класса A, класса B и класса C
  • B: Частный переменные и методы доступны только для класса А.
  • C: защищенный переменные и методы доступны только для класса A и класса B
  • D: окончательный методы доступны только для класса A, а не для класса B.

Мой вопрос:

После использования private мы можем достичь такой же функциональности, как final, тогда почему мы используем final?

Я задаю этот вопрос только для моего разъяснения для себя.

3

Решение

Просто чтобы было понятно, ключевое слово final не нужно ничего делать с видимостью метода. Видимость метода определяется ключевыми словами: public, protected а также private,

Ключевое слово final определяет, может ли другой класс перезаписать метод или нет (если метод final, он не может быть перезаписан другим классом), когда другой класс имеет доступ к методу. В противном случае он даже не будет иметь доступа к методу, поэтому он не может ни использовать / вызывать метод, ни перезаписывать его.

Также только методы могут быть окончательными, их нельзя использовать со свойствами.


A, B и C являются правильными, и, как я сказал выше, ключевое слово final не имеет ничего общего с видимостью, поэтому D не является правильным.

Для получения дополнительной информации см. Соответствующие страницы руководства:

3

Другие решения

Финальные классы или методы могут НЕ быть отмененным

Из php doc

В 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

1

Недвижимость final метода используется, чтобы дать понять компилятору, что данный метод не может быть переопределен где-либо еще.

В результате, если мы объявим функцию как final а затем мы пытаемся переопределить его где-то еще, мы получим warning или fatal error,

0
По вопросам рекламы [email protected]