Занятия разработаны с целью продления или без возможности продления. Если ваш класс не имеет намерения быть родителем, его следует назвать окончательным. Класс, предназначенный для расширения, несет ответственность за создание основы, из которой ребенок будет работать. Любые методы, определяющие правила структуры, должны быть указаны как окончательные.
Это описание является таким же неопределенным, как и вопрос.
Мне нравится пример учета от Anurag, и я хочу показать, как правильно использовать.
abstract class Account {
// obtained by some magical source
private $balance = 100.00;
final public function getBalance() {
return $this->balance;
}
final private function setBalance($new_balance) {
$this->balance = $new_balance;
}
final public function debit(Amount $amount) {
if ($this->canDebit($amount)) {
$amount = $amount + $this->getDebitTransactionFee();
$this->setBalance($this->getBalance() - $amount);
}
}
abstract protected function canDebit();
abstract protected function getDebitTransactionFee();
}
final class CheckingAccount extends Account {
final protected function canDebit() {
return true;
}
final protected function getDebitTransactionFee() {
// obtained by some magical source
return 1.50;
}
}
Ответственность счета является отслеживание баланса, позволяют общественности списывает, и позволяет общественности проверить текущий баланс. Ответственность CheckingAccount заключается в том, чтобы ответить, если он может быть дебетован и сообщить о соответствующей комиссии за транзакцию. Очевидно, что учет здесь чрезвычайно упрощен. Этот пример - одна из вероятных бесконечных ситуаций.
Абстрактные классы довольно распространены для классов, предназначенных для расширения. Иногда, однако, класс может определять свои собственные не конечные методы с функцией по умолчанию и иметь рабочий экземпляр. Конечно, будучи не финальными, эти методы по умолчанию могут быть переопределены дочерним классом.
, чтобы избежать расширения и модификации класса/метода. вы можете найти это обсуждение интересным, почему строки являются окончательными в Java - http: // stackoverflow.com/questions/2068804/why-is-string-final-in-java – Anurag
@ Анураг точки в отношении «неизменности» и других таких сложных терминов выходят за рамки моего ума :) может у вас, может быть, все это выдумаете? –
отправил ответ на основной пример. – Anurag