Защо абстрактен клас в Java - стека преливане на Руски
Java обучение наскоро. Подадох на факта, че не мога да разбера ролята на абстрактен клас в Java. В книгата (не само една) установи, един пример, който описва ролята на абстрактен клас:
Но преобразувана от абстрактен клас обикновени и дори изтриване на него напълно програма не е престанал да работа:
Моля, опишете пример, в който премахването на абстрактен клас (или "бърникането" към нормалното) е невъзможно и ще доведе до грешка, или просто да обясни на ситуациите, в които един обикновен клас не заместват резюмето. Благодаря предварително.
определен 16 октомври '11 в 09:55
Какво учебника, ако не е тайна? В достойни Java-книги все още са гръбнакът на ООП.
Долната линия е това. Когато маркирате клас като абстрактен. вие по този начин е забранено да създадете инстанции. Тъй като операцията клас метод изчисляване не е определена. вие не трябва да бъде в състояние да създаде примери в тази насока:
Ако един клас, не е абстрактни методи, за "бърникането" в своя обикновен начин себе си не показва навън. Просто ще бъде в състояние да се създаде инстанция на този клас.
Той е в "промяна" ви идентифицира тялото да се изчисли метод. като по този начин се променя логиката на останалата част от йерархията. Ако сега се създаде още едно дете от класа на операция и да се определят го изчисли метод. той ще използва за изпълнение на родителския клас, който е за изчисляване на произведението на два аргумента.
а дори и да го премахнете напълно програма не е престанал да работа:
Аз не мога да повярвам. Ако сте премахнали класа операция ще трябва да се произнесе класовете за деца (разширява да почисти и редактирате основната). Също така, след като си класове събиране и изваждане да станат независими един от друг.
В общи линии, абстрактни класове са широко използвани, когато трябва да се приложат някои обща функционалност за класа семейство.
Начинаещи - Лекционният курс по програмиране MIPT в Java Аз всъщност го направи ( "Вие ще трябва да редактирате класовете дете (простира да почисти и редактирате основната)"). т.е. с други думи, абстрактен клас е забранено да се създаде копия на себе си и обобщава подобна функционалност (дете) клас? и още един въпрос, въз основа на посочените по-горе написани програми (моя): Какви са предимствата на "пресечен" обект Операция O3 = ново изваждане (); вместо към "пълно"? Изваждане О3 = нов изваждане (); - arachnoden 16 октомври '11 в 10:35
Обектът не е почистена. Това използване на принципа на полиморфизъм. Ние заявяваме, обект като принадлежащи към по-широк клас и му възлага конкретна реализация на един клас дете. Това гарантира взаимозаменяемост деца класове: не ни пука, че тя се подхлъзна и ние постоянно се работи с обекти. Трябва да се започне да се занимава с основните принципи на ООП. По отношение на Java Eckel прочета нещо ( "Java философия"). - Nofate ♦ 16 октомври '11 в 10:39
Колеги, по мое мнение, разбира се, не е съвсем вярно поставя акцент. Първият абстрактен клас - това със сигурност не е клас, който не може да се създаде, и изпълнението на класа е разведен от неговото обявяване.
Абстракция в общия смисъл, това отделяне от детайла. В нашия случай, това е декларацията на класа, без да се притеснявате за неговото прилагане. Но изпълнение във всеки отделен случай може да бъде различна - понякога сложен, понякога просто. А абстрактен клас не е изпълнение.
Ще се опитам да дам един пример от реалния живот:
- Да кажем, че искаме да се опишат методите за монтаж и демонтаж на различни мебели, за които даден клас мебели
- В този случай, типичната мебели абстрактен клас с две абстрактни методи: сглобяване и разглобяване. Тъй като методите на монтаж и демонтаж на мебели зависи от конкретния модел, не е възможно да се опише тяхната класна стая мебели, така че ние да ги декларира като абстрактно.
- Освен това даден клас маса. който наследява от клас мебели. които прилагат методи Съберете / разбирам - добре, нещо като: закрепете на краката, след това ето и така нататък.
- Допълнителна Диван даден клас. който наследява от клас мебели. където методи отново прилагане Съберете / Подредени - сега: за закопчаване, подлакътници и след това така нататък.
След това започва най-интересните и важни за това, което всъщност е целият цирк с коне и е замислен:
- Ако нямаше абстрактни класове е майстор агрегатът се привежда в маса и диван. Е тип - майстор вижда, че тази таблица се инструкции за сглобяване и събиране. Той трябва да знае точно, че това е една маса или диван в противен случай тръба - монтаж не се проведе.
- Ако има магьосник абстрактен клас не донесе маса или диван. и просто вид мебели. Магистър по принцип, че барабанът е маса или диван или дори гардероб. Магистър изважда на мебели, прикрепена към листа с инструкции и събира.
Отговорено 24 '13 декември в 08:56
Например, пишат на сметката на въздухоплавателните средства на системата на летищните такси. Има товарни и пътнически самолети и трябва да се, например, че е имало списък на въздухоплавателни средства, които са вече на летището. Осъществяване на абстрактен клас "летателни апарати" (ние не знаем предварително какво ще лети самолета) и определи някои основни поле, подходящ за всички въздухоплавателни средства (скорост на полета и продължителност, например)
На следващо място, ние създаваме два класа, по един за пътнически самолета и един за товара, и всеки има spetseficheskie добавя параметри, за да го
Освен това, в класа, че с цялата тази работа ще работи, създаване на списък и бутам, за да получите тези самолети, които летят
Сега, по принцип, е ясно, че имаме списък с въздухоплавателното средство, и които те - не е много важно. За мен най-важната характеристика на абстрактни класове е, че при използването им, можете да укажете на логиката, а не да го осъзнават.
Отговорено 16 Октомври '11 в 10:33
Моля, не забравяйте да се изпълни кода. - Nofate ♦ 16 октомври '11 в 10:43
Благодаря ви, ще трябва да се научат малко повече. - arachnoden 16 октомври '11 в 11:17
Всъщност основната разлика между абстрактен клас от обичайните крие само в това, че не е възможно да се създаде един абстрактен клас обект и затова е само за изключения. И първата си пример за погрешно, защото няма връзка между класовете допълнение, изваждане и експлоатация. Един пример може да се види, например, тук.