JavaRush /Java Blog /Random-TL /10 Abstract na Klase at Interface Mga Tanong sa Panayam s...

10 Abstract na Klase at Interface Mga Tanong sa Panayam sa Java

Nai-publish sa grupo
Ang mga abstract na klase at interface ay napakapopular sa lahat ng object-oriented programming language. At sa halos bawat panayam sa Java ay nakakatagpo ka ng kahit isang tanong sa paksang ito. Ang mga interface ay mas madalas na binanggit dahil sa kanilang katanyagan sa mga software designer, ngunit ang mga tanong tungkol sa mga abstract na klase ay lumalabas din sa pana-panahon. Ang huli ay kadalasang tinatanong sa mga aplikante para sa posisyon ng mga junior developer, sabihin, na hindi hihigit sa dalawang taon na karanasan sa pag-unlad ng Java, habang ang mga tanong tungkol sa mga interface ay kadalasang nakakaharap sa mga panayam sa mga na ang karanasan ay lumampas na sa apat na taon. Karaniwang tinatanong ang mga ito kasabay ng iba pang mga tanong tungkol sa mga pattern ng disenyo ng Java, gaya ng mga pattern ng Dekorator o Factory. 10 Abstract na Klase at Interface Mga Tanong sa Panayam sa Java - 1Sa artikulong ito, titingnan natin ang mga karaniwang tanong sa mga abstract na klase at interface na itinanong sa iba't ibang antas ng mga panayam sa Java. Karamihan sa kanila ay hindi dapat maging mahirap kahit para sa isang baguhan na Java programmer. Ang mga ito ay halos purong mga tanong sa kaalaman, ngunit ang ilan sa mga ito, tulad ng mga pagkakaiba sa pagitan ng mga abstract na klase at mga interface sa Java, o kung kailan pipili ng abstract na klase sa isang interface , ay maaaring medyo nakakalito. Nag-aalok kami sa iyo ng isang dosenang mga interesanteng tanong sa paksa.
Kung natanong ka na sa isang panayam o kailangan mong magtanong ng anumang kapaki-pakinabang na tanong tungkol sa mga abstract na klase at interface, ngunit wala ito sa listahang ito, mangyaring ibahagi ito sa mga komento.

1. Maaari bang magkaroon ng mga konstruktor sa Java ang abstract na klase?

Oo, sa isang abstract na klase sa Java maaari mong ideklara at tukuyin ang mga konstruktor. Dahil imposibleng lumikha ng mga pagkakataon ng mga abstract na klase, ang naturang constructor ay matatawag lamang kapag bumubuo ng isang chain ng mga constructor, iyon ay, kapag lumilikha ng isang instance ng isang partikular na klase ng pagpapatupad. Ngunit isipin na ang tagapanayam ay nagtatanong ng tanong: ano ang punto ng isang tagabuo kung hindi ka makakagawa ng isang halimbawa ng isang abstract na klase pa rin? Ang punto ay maaari pa rin itong magamit upang itakda ang mga paunang halaga ng mga karaniwang variable na ipinahayag sa isang abstract na klase at ginagamit ng iba't ibang mga pagpapatupad. Kahit na hindi ka magdedeklara ng anumang constructor, ang compiler ay magdaragdag ng default na no-argument constructor sa abstract na klase. Kung wala ito, ang iyong subclass ay hindi mag-compile dahil ang unang pahayag sa anumang constructor ay isang implicit na tawag super()sa default na superclass constructor sa Java.

2. Maaari bang ipatupad ng mga abstract na klase sa Java ang mga interface? Kailangan ba nilang ipatupad ang lahat ng mga pamamaraan?

Oo, ang mga abstract na klase ay maaaring magpatupad ng mga interface gamit ang implements. Dahil abstract ang mga ito, hindi nila kailangang ipatupad ang lahat ng mga pamamaraan. Ang pagkakaroon ng abstract base class at isang interface upang ideklara ang uri ay isang inirerekomendang kasanayan. Ang isang halimbawa ay isang interface java.util.Listat ang kaukulang abstract class java.util.AbstractList. Dahil AbstractListipinapatupad nito ang lahat ng karaniwang pamamaraan, ang mga partikular na pagpapatupad (tulad ng LinkedListat ArrayList) ay hindi kailangang ipatupad ang lahat ng pamamaraan, gaya ng mangyayari kung Listdirektang ipinatupad nila ang interface. Pinagsasama ng solusyon na ito ang pakinabang ng paggamit ng interface upang magdeklara ng isang uri na may kakayahang umangkop ng abstract na klase upang ipatupad ang lahat ng karaniwang gawi sa isang lugar. Sa aklat ni Joshua Bloch na “Java. Ang Epektibong Programming" ay may mahusay na kabanata sa paksa ng paggamit ng mga interface at abstract na mga klase sa Java, para sa isang mas mahusay na pag-unawa ay makatuwirang pag-aralan ito.

3. Maaari bang maging pinal ang abstract na klase?

Hindi, hindi niya kaya. Nangangahulugan ang keyword finalna ang klase ay nasa tuktok ng hierarchy at hindi maaaring magkaroon ng mga inapo. At ang abstract na klase na walang tagapagmana ay isang spherical na kabayo sa isang vacuum, dahil imposibleng lumikha ng isang instance abstract class. Kaya, kung ang isang klase ay pareho abstractat final, kung gayon wala itong mga inapo at hindi maaaring ma-instantiate. Ang Java compiler ay magtapon ng isang error kung gumawa ka ng isang klase abstractat final.

4. Maaari bang magkaroon ng mga static na pamamaraan ang abstract na klase sa Java?

Oo, ang mga abstract na klase ay maaaring magdeklara at tumukoy ng mga static na pamamaraan. Kinakailangan lamang na sundin ang mga pangkalahatang prinsipyo ng paglikha ng mga static na pamamaraan sa Java, dahil ang mga ito ay hindi kanais-nais sa object-oriented na disenyo, dahil ang pag-override ng mga static na pamamaraan sa Java ay hindi posible. Ang mga static na pamamaraan sa isang abstract na klase ay napakabihirang, ngunit kung may magandang dahilan para dito, walang pumipigil sa iyo na gamitin ang mga ito.

5. Posible bang mag-instantiate ng abstract na klase?

Hindi, hindi mo magagawa ito. Ang kakanyahan ng abstract na klase ay hindi ito kumpleto, at kailangan itong kumpletuhin sa mga descendant na klase nito. Ibig sabihin, hindi pa handang gamitin ang klase na ito. Halimbawa, maaaring kulang ito sa pagpapatupad ng ilang pamamaraan. Dahil ang isang klase ay hindi pa handang gamitin, ang object nito ay hindi malikha. Ngunit maaari kang lumikha ng mga pagkakataon ng mga tagapagmana ng isang abstract na klase. Ang Java compiler ay magtapon ng isang error kung ang isang programa ay sumusubok na mag-instantiate ng isang abstract na klase.

6. Kailangan bang magkaroon ng abstract na pamamaraan ang abstract na klase?

Hindi, ang isang abstract na klase ay maaaring walang anumang abstract na pamamaraan. Maaari kang gumawa ng abstract ng klase sa Java sa pamamagitan lamang ng paggamit ng keyword abstractsa deklarasyon nito. Ipapatupad ng compiler ang anumang mga paghihigpit sa istruktura, tulad ng hindi pagpayag na malikha ang mga instantiation ng klase na ito. Sa pamamagitan ng paraan, ang tanong kung dapat mayroong abstract na mga pamamaraan sa isang abstract na klase o interface ay kontrobersyal. Para sa akin, ang isang abstract na klase ay dapat magkaroon ng mga abstract na pamamaraan, dahil ito ang unang bagay na iniisip ng isang programmer kapag nakakakita ng abstract na klase. Tamang-tama ito sa prinsipyo ng pagliit ng mga sorpresa.

7. Ano ang mga pagkakaiba sa pagitan ng abstract na klase at isang interface sa Java?

Ito ang pinakamahalaga at isa sa mga pinaka klasikong tanong sa panayam sa Java. Hindi ko mabilang kung ilang beses ko nang nakita ang tanong na ito sa mga panayam sa Java sa lahat ng antas. Ang dahilan kung bakit kawili-wili ang tanong na ito ay, sa partikular, ang pagkakataon para sa aplikante na magbigay ng isang halimbawa. Ang pagsagot sa mga tanong tungkol sa mga pangunahing kaalaman ng object-oriented na programming, tulad ng abstraction, encapsulation, polymorphism at inheritance, ay madali, ngunit pagdating sa gayong mga banayad na nuances, ang mga aplikante sa trabaho ay madalas na nalilito at sinasabi ang unang bagay na naiisip. Ang sagot sa tanong na ito ay nararapat sa isang hiwalay na artikulo (lalo na pagkatapos ng mga pagbabago sa Java 8), gayunpaman, sa madaling sabi:
  • Ang isang interface ay naglalarawan lamang ng pag-uugali (mga pamamaraan) ng isang bagay, ngunit wala itong mga estado (mga patlang) (maliban public static final), habang ang isang abstract na klase ay maaaring magkaroon ng mga ito.

  • Ang isang abstract na klase ay minana (nagpapalawak), at isang interface ay ipinatupad (nagpapatupad). Maaari lamang kaming magmana ng isang klase, ngunit magpatupad ng maraming interface hangga't gusto namin. Ang isang interface ay maaaring mag-extend (magpalawig) ng isa pang interface/interface.

  • Ang mga abstract na klase ay ginagamit kapag mayroong isang "is-a" na relasyon, iyon ay, ang subclass ay nagpapalawak ng batayang abstract na klase, at ang mga interface ay maaaring ipatupad ng iba't ibang mga klase na hindi talaga nauugnay sa isa't isa.

8. Kailan makatuwirang mas gusto ang abstract na klase kaysa sa isang interface at kabaliktaran?

Ito ay pagpapatuloy ng mga nakaraang tanong sa mga abstract na klase at interface. Kung alam mo kung ano ang kanilang mga pagkakaiba sa syntactic, kung gayon ang pagsagot sa tanong na ito ay hindi magdudulot sa iyo ng mga problema, dahil sila ang determinadong salik sa paggawa ng desisyon. Dahil halos imposibleng magdagdag ng bagong pamamaraan sa isang nai-publish na interface, mas mainam na gumamit ng abstract na klase sa kaso ng potensyal na pangangailangan para sa karagdagang pag-unlad. Ang pagbuo ng mga abstract na klase sa Java ay mas madali kaysa sa pagbuo ng mga interface. Gayundin, kung ang isang interface ay may masyadong maraming mga pamamaraan at ang pagpapatupad ng lahat ng ito ay nagiging isang tunay na sakit ng ulo, mas mahusay na lumikha ng isang abstract na klase para sa default na pagpapatupad. Ang pattern na ito ay sinusunod sa Java collections package, ang abstract class AbstractListay nagbibigay ng default na pagpapatupad para sa List. Gumamit ng mga abstract na klase kung:
  • Gusto mong magbahagi ng code sa pagitan ng ilang malapit na nauugnay na mga klase.

  • Inaasahan mong ang mga klase na nagpapalawak sa iyong abstract na klase ay magkakaroon ng maraming pamamaraan o field na magkakatulad, o nangangailangan ng mga modifier ng access maliban sa public(halimbawa, protectedat private).

  • Gusto mong magdeklara ng non-static o не-finalmga field. Binibigyang-daan ka nitong tukuyin ang mga pamamaraan na maaaring ma-access at baguhin ang estado ng bagay kung saan sila nabibilang.
Gumamit ng mga interface kung:
  • Inaasahan mong ipapatupad ng mga hindi nauugnay na klase ang iyong interface. Halimbawa, ang mga interface Comparableat Cloneableipinatupad ng maraming hindi nauugnay na mga klase.

  • Gusto mong tukuyin ang gawi ng isang partikular na uri ng data, ngunit wala kang pakialam kung sino ang nagpapatupad nito.

  • Gusto mong gumamit ng multiple type inheritance.

9. Ano ang abstract na pamamaraan sa Java?

Ang abstract na pamamaraan ay isang paraan na walang katawan. Idedeklara mo lang ang isang pamamaraan nang hindi ito tinukoy, gamit ang isang keyword abstractsa deklarasyon ng pamamaraan. Ang lahat ng mga pamamaraan na ipinahayag sa loob ng isang interface sa wikang Java ay abstract bilang default. Narito ang isang halimbawa ng abstract na pamamaraan sa Java:
public void abstract printVersion();
Ngayon, upang maipatupad ang pamamaraang ito, kailangan mong pahabain ang abstract na klase at i-override ang pamamaraang ito.

10. Maaari bang maglaman ng paraan ang abstract na klase sa Java main?

Oo, ang abstract na klase sa Java ay maaaring maglaman ng method main, dahil isa lang itong static na pamamaraan, at ang abstract class ay maaaring isagawa gamit ang method main, hangga't hindi mo ito i-instantiate. Yun lang ang gusto kong sabihin sayo. At tandaan: ang mga abstract na klase at interface ay mga pangunahing desisyon sa disenyo sa object-oriented na pagsusuri at proseso ng disenyo, at dapat gamitin nang may pag-iingat, siyempre, kung gusto mong lumikha ng isang flexible na sistema.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION