У чым розніца паміж абстрактнымі класамі і інтэрфейсамі на Java?


адказ 1:
публічны інтэрфейс Balloon {public void floatAway (); public void pop (); }}
публічны абстрактны клас Ball {public void roll () {System.out.println ("I roll."); } публічны абстрактны радок getColor (); // Укараненне не паказана}
публічны анатацыя BlueBall пашырае Ball {public String getColor () {return "Blue"; } // павінна быць пашырана падкласам грамадскага агульнадаступнага булевага isBig (); }}
BallBalloon грамадскага класа распаўсюджвае Ball рэалізуе Balloon {public void floatAway () {System.out.println ("Плавае хутка"); } public void pop () {System.out.println ("Fpow!") {public String getColor () {return "Чорны."; } public boolean isBig () {// патрабуецца BlueBall з-за абстрактнага метаду вяртання дэкларацыі false; }}

адказ 2:

заўсёды

Інтэрфейсы - трывалыя кантракты:

Вынікі гнуткага і змястоўнага кода:

Уяўляе паводзіны:

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

адказ 3:

Тут шмат добрых, тэхнічна правільных адказаў. Аднак можа быць больш карысна пагаварыць пра тое, чаму вы іх выкарыстоўваеце.

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

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

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

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

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