Тема: Абстрактні класи (задача на 3+)
abstract class Robot {
abstract public function turnLeft();
}
class RunRobot extends Robot{
}
Доповніть код таким чином що б у класі RunRobot не було методу turnLeft() і код був валідний
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → PHP → Абстрактні класи (задача на 3+)
Для відправлення відповіді ви повинні увійти або зареєструватися
abstract class Robot {
abstract public function turnLeft();
}
class RunRobot extends Robot{
}
Доповніть код таким чином що б у класі RunRobot не було методу turnLeft() і код був валідний
abstract class Robot { abstract public function turnLeft(); } class RunRobot extends Robot{ }
Доповніть код таким чином що б у класі RunRobot не було методу turnLeft() і код був валідний
Та можна як завгодно доповнити, а на виході просто буде два валідних абстрактних класи. Чи потрібно щоб RunRobot став не абстрактний?
Наприклад:
// Валідний код
abstract class Robot {
abstract public function turnLeft();
}
class RunRobot extends Robot{
}
$a = 1; $b = 2;
$a = $b;
Fatal error: Class RunRobot contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Robot::turnLeft) in /home/replace/public_html/learn/test2.php on line 9
А що значить, щоб не було методу?
Щоб коли викликати в екземпляру класу цей метод він матюкався?
Тоді просто перевизначіть метод і в тіло пропишіть виклик ручного виключення(custom exception).
Fatal error: Class RunRobot contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Robot::turnLeft) in /home/replace/public_html/learn/test2.php on line 9
Я помилився)
А що значить, щоб не було методу?
Я мав на увазі наступне. У класі RunRobot не має бути реалізовано методу turnLeft() Іншими словами згадки у класі RunRobot взагалі не має бути.
Прочитайте уважніше умову
http://php.net/manual/en/language.oop5.abstract.php
When inheriting from an abstract class, all methods marked abstract in the parent's class declaration must be defined by the child;
Думаєте імплементація можлива? Я думаю ні.
Думаєте імплементація можлива? Я думаю ні.
Я знаю, пробував, і тестив код. Так це реально!
When inheriting from an abstract class, all methods marked abstract in the parent's class declaration must be defined by the child;
Я згідний але не можна взяти одне речення з розділу ООП. Існують правила, на тому ж таки сайті, які це правило обходять.
це задача більше для тих хто вміє шукати в гуглі) чи я помиляюся? Я не знаю вирішення але думаю що тут просто треба знати (не вгадаєш) як обійти примусову реалізацію методу в похідному класі.
А крім мого варіанту по іншому не можна? Google не використовув.
Я то написав, і більше не дивився... Добре гляну)
Все здаюсь, іншого рішення ніж Replace не знайшов.
Ще так можна, але не знаю чи за умовою можна проводити такі махінації.
if (1) {
class Robot {
}
} else {
abstract class Robot {
abstract public function turnLeft();
}
}
class RunRobot extends Robot{
}
або так:
if (0) { // lol
abstract class Robot {
abstract public function turnLeft();
}
class RunRobot extends Robot{
}
}
Останній варіант доречі зовсім не змінює шматок коду
Replace ти запропонував правильне рішення саме перше Мабуть умову трошки не так склав, з іфами така штука не передбачена ) У мене в IDE код підсвічується як не валідний але він робочий і рнршка пропускає його як нормальний) Ідея цікава дуже)
Статичний варіант:
Динамічний варіант (не зовсім відповідає вимогам - в класі є функція, але її нема в екземлярах)
Якщо під словами
що б у класі RunRobot не було методу turnLeft()
розуміти, що в оголошенні класу RunRobot не повинен бути реалізовано метод turnLeft(), то Replace начебто ж правильну відповідь написав зразу. А якщо під цим розуміти: щоб в переліку класа RunRobot не повинно бути методу turnLeft(), то мабуть зробити його приватним.
RunRobot не повинен бути реалізовано метод turnLeft()
Саме це я мав на увазі
Для відправлення відповіді ви повинні увійти або зареєструватися