КампутарыПраграмаванне

Элементы аб'ектнай мадэлі Java: абстрактны клас, інтэрфейс

Галоўная думка абстрактнага класа заключаная ў наступным тэзе: часам патрэбны не гатовыя класы, а ў «сырам» выглядзе. Такія нарыхтоўкі нельга прама выкарыстоўваць (ствараць асобнікі).

Што такое ў Java абстрактны клас

Разгледзім іншы прыклад. Ёсць у Java абстрактны клас Calendar ў пакеце Java.util. Ён не рэалізуе канкрэтны каляндар, якім карыстаюцца, напрыклад, у Заходняй і Усходняй Еўропе, Кітаі, Паўночнай Карэі, Тайландзе і т. Д. Але ў ім ёсць шмат карысных функцый, напрыклад, прыбаўленне некалькіх дзён да канкрэтнай даты: гэтыя функцыі патрабуюцца для любой рэалізацыі календара. Нельга спарадзіць асобнік ад абстрактнага класа.

Абстрактныя класы, абстрактныя метады Java

Дапусцім, трэба распрацаваць некалькі графічных элементаў, напрыклад, геаметрычных фігур: круг, прастакутнік, зорка і т. Д. І існуе кантэйнер, які іх малююць. У кожнай кампаненты знешні выгляд розны, таму адпаведны метад (хай ён называецца paint) рэалізаваны па-рознаму. Аднак у кожнай кампаненты ёсць шмат агульных рыс: фігуры павінны быць ўпісаны ў прастакутнік, могуць мець колер, быць бачнымі і нябачнымі і т. Д. Гэта значыць трэба стварыць бацькоўскі клас для ўсіх гэтых фігур, дзе кожная кампанента будзе успадкаваць агульныя ўласцівасці. Але як жа метад paint? Бо ў бацькоўскага класа няма візуальнага прадстаўлення. Калі абвясціць метад paint ў кожным класе незалежна, трэба будзе аналізаваць, якая кампанента апрацоўваецца, і затым выконваць прывядзенне тыпу. Таму метад трэба абвясціць абстрактным у бацькоўскай класе: задаць загаловак метаду без цела. А цела кожны вытворны клас апіша сваё. У Java абстрактны клас можа заключаць абстрактныя метады.

Калі ў класа маюцца абстрактныя метады, то клас з'яўляецца абстрактным. Перад словам class ставіцца ключавое слова abstract, у загалоўку метаду - таксама. Пасля загалоўка такога метаду трэба ставіць кропку з коскай. У Java абстрактны клас не можа спараджаць асобнікі. Калі мы хочам забараніць іх стварэнне, нават калі ў класа няма абстрактных метадаў, то клас можна абвясціць абстрактным. Але калі ў класа маецца хаця б адзін абстрактны метад, то клас павінен быць абстрактным. Нельга, каб клас быў і abstract, і final, і метад таксама. Метад не можа быць abstract, private, static, native. Каб класы-спадкаемцы можна было аб'яўляць неабстрактными і ствараць іх асобнікі, яны павінны рэалізаваць усе абстрактныя метады з бацькоў. Сам клас можа выкарыстоўваць свае абстрактныя метады.

прыклад:

  • abstract class AClass {
  • public abstract void method (int a);
  • }
  • class BClass extends AClass {
  • public void method (int a) {
  • // цела
  • }

Дапускаюцца зменныя тыпу абстрактны клас. Яны могуць спасылацца на неабстрактного нашчадка гэтага класа або мець значэнне null.

Інтэрфейсы ў Java - альтэрнатыва множнаму ўспадкоўванні

У Java няма множнага спадчыну, таму што тады ўзнікаюць пэўныя праблемы. Клас не можа спадчыну ад некалькіх класаў. Але затое ён можа рэалізаваць некалькі інтэрфейсаў.

Інтэрфейсы і абстрактныя класы Java - паняцці падобныя, але якія не супадаюць. Інтэрфейс можна абвясціць як public, тады ён даступны ўсім, альбо можна не паказваць мадыфікатар public, тады інтэрфейс даступны толькі ўнутры свайго пакета. Ключавое слова abstract не патрабуецца, паколькі інтэрфейс і так з'яўляецца абстрактным, але яго можна паказаць.

аб'яву інтэрфейсу

Яно пачынаецца з загалоўка і спачатку можа ісці ключавое слова public, затым - слова interface. Потым можа ісці слова extends і пералік інтэрфейсаў, ад якіх успадкоўваецца дадзены. Тут не дапускаецца паўтораў, а таксама немагчыма, каб стаўленне спадчыну ўтварала цыклічную залежнасць. Затым ідзе цела інтэрфейсу, складзенае ў фігурныя дужкі. У целе інтэрфейсу абвяшчаюцца элементы: палі-канстанты і абстрактныя метады. Усе палі з'яўляюцца public final static - усе гэтыя мадыфікатары не абавязковыя. Усе метады лічацца public abstract - гэтыя мадыфікатары таксама можна паказаць. Цяпер цалкам дастаткова сказана пра адрозненне абстрактнага класа ад інтэрфейсу Java.

  • public interface AI extends B, C, D {
  • // цела
  • }

Каб абвясціць клас спадчыннікам інтэрфейсу, трэба скарыстацца ключавым словам implements:

  • class AClass implements BI, CI, DI {}

Гэта значыць, калі ў аб'яве класа пасля implements паказана імя інтэрфейсу, то клас яго рэалізуе. Спадчыннікам гэтага класа дастаюцца яго элементы, таму яны таксама рэалізуюць яго.

Зменныя інтэрфэйснае тыпу таксама дапускаюцца. Яны могуць спасылацца на тып класа, які рэалізуе гэты інтэрфейс, або null. Такія зменныя валодаюць усімі элементамі клас Object, бо аб'екты спараджаюцца ад класаў, а тыя, у сваю чаргу, ўспадкоўваюцца ад класа Object.

У гэтым артыкуле мы разгледзелі некаторыя элементы аб'ектнай мадэлі Java - абстрактныя класы, абстрактныя метады, інтэрфейсы.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.atomiyme.com. Theme powered by WordPress.