Зачем нужны абстрактные классы?

110
26 ноября 2019, 11:20

Какую роль в этом коде (из книги) играют абстрактные классы?

<meta charset="UTF-8">
<?php 
trait GetSumLine {
function CalculTax($price){
return ( ( $this->expirience() ) * $price );
}
abstract function expirience();
}
abstract class Service{
//Сервис 
 }
class Object{
use GetSumLine {
    GetSumLine::CalculTax as private;
}
function __construct($price){
$this->price = $price;
}
public function expirience(){
return 20;
}
public function GetEndSum(){
    return ($this->CalculTax($this->price));
}
}

$doc = new Object(320);
 print "{$doc->GetEndSum()}";
Answer 1

В качестве примера:

Классы Bear и Monkey наследуются от абстрактного класса Animal, в игре про зоопарк, для того чтобы узнать можно или нельзя кормить животное экземплярами классов Banana и Honey, которые наследуют класс Food, у Animal вы добавляете метод без реализации canEat(Food) а в классах-наследниках уже реализуете его в соответствии с их логикой.

Польза здесь вот в чем: теперь во всех местах где вы захотите узнать можно ли накормить животное едой вы будете оперировать классами еда и животное, при этом, когда вы захотите добавить в игру свинью и трюфели вам не придется менять уже написанный код, который оперирует животными и едой.

Это касается как интерфейсов так и абстрактных классов, можно считать что интерфейс это вырожденый случай абстрактного класса.

Answer 2

Основная цель абстрактных классов - практическая реализация полиморфизма, то есть базовое описания методов, которые должны быть переопределены в классах потомках.

READ ALSO
Как передать blob на сервер и записать их?

Как передать blob на сервер и записать их?

Пример брал отсюдаПомогите реализовать сохранение файла конкретно на сервере в автоматическом режиме, а не сохранение файла на компьютер...

120
Передать на почту изображение в base 64

Передать на почту изображение в base 64

<img name="signature" src="data:image/png;base64,iVBORw0KGgoAAAANSUhE

89
Лишние &ldquo;???&rdquo; в ответе сервера на POST запрос от приложения C#

Лишние “???” в ответе сервера на POST запрос от приложения C#

Разрабатываю приложение на C#, одной из функций которого является отправка некоторых данных на сервер POST запросомВсё отправляется и обрабатывается,...

125