Защо абстрактен клас в 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

Колеги, по мое мнение, разбира се, не е съвсем вярно поставя акцент. Първият абстрактен клас - това със сигурност не е клас, който не може да се създаде, и изпълнението на класа е разведен от неговото обявяване.

Абстракция в общия смисъл, това отделяне от детайла. В нашия случай, това е декларацията на класа, без да се притеснявате за неговото прилагане. Но изпълнение във всеки отделен случай може да бъде различна - понякога сложен, понякога просто. А абстрактен клас не е изпълнение.

Ще се опитам да дам един пример от реалния живот:

  1. Да кажем, че искаме да се опишат методите за монтаж и демонтаж на различни мебели, за които даден клас мебели
  2. В този случай, типичната мебели абстрактен клас с две абстрактни методи: сглобяване и разглобяване. Тъй като методите на монтаж и демонтаж на мебели зависи от конкретния модел, не е възможно да се опише тяхната класна стая мебели, така че ние да ги декларира като абстрактно.
  3. Освен това даден клас маса. който наследява от клас мебели. които прилагат методи Съберете / разбирам - добре, нещо като: закрепете на краката, след това ето и така нататък.
  4. Допълнителна Диван даден клас. който наследява от клас мебели. където методи отново прилагане Съберете / Подредени - сега: за закопчаване, подлакътници и след това така нататък.

След това започва най-интересните и важни за това, което всъщност е целият цирк с коне и е замислен:

  • Ако нямаше абстрактни класове е майстор агрегатът се привежда в маса и диван. Е тип - майстор вижда, че тази таблица се инструкции за сглобяване и събиране. Той трябва да знае точно, че това е една маса или диван в противен случай тръба - монтаж не се проведе.
  • Ако има магьосник абстрактен клас не донесе маса или диван. и просто вид мебели. Магистър по принцип, че барабанът е маса или диван или дори гардероб. Магистър изважда на мебели, прикрепена към листа с инструкции и събира.

Отговорено 24 '13 декември в 08:56

Например, пишат на сметката на въздухоплавателните средства на системата на летищните такси. Има товарни и пътнически самолети и трябва да се, например, че е имало списък на въздухоплавателни средства, които са вече на летището. Осъществяване на абстрактен клас "летателни апарати" (ние не знаем предварително какво ще лети самолета) и определи някои основни поле, подходящ за всички въздухоплавателни средства (скорост на полета и продължителност, например)

На следващо място, ние създаваме два класа, по един за пътнически самолета и един за товара, и всеки има spetseficheskie добавя параметри, за да го

Освен това, в класа, че с цялата тази работа ще работи, създаване на списък и бутам, за да получите тези самолети, които летят

Сега, по принцип, е ясно, че имаме списък с въздухоплавателното средство, и които те - не е много важно. За мен най-важната характеристика на абстрактни класове е, че при използването им, можете да укажете на логиката, а не да го осъзнават.

Отговорено 16 Октомври '11 в 10:33

Моля, не забравяйте да се изпълни кода. - Nofate ♦ 16 октомври '11 в 10:43

Благодаря ви, ще трябва да се научат малко повече. - arachnoden 16 октомври '11 в 11:17

Всъщност основната разлика между абстрактен клас от обичайните крие само в това, че не е възможно да се създаде един абстрактен клас обект и затова е само за изключения. И първата си пример за погрешно, защото няма връзка между класовете допълнение, изваждане и експлоатация. Един пример може да се види, например, тук.