Kui kodeerimisintervjuul küsitakse teemal "mis on liidese ja abstraktse klassi peamine erinevus", mis on õige vastus?


Vastus 1:

Inimene elus, ma oleksin nad pool surnud.

Ma ei tea tegelikult „vastust“, kuid tean, milline on minu arvamus.

Kasutan liideseid lubadusena helistada koodile, mida ta võib oodata. See on abstraktsioon - asi, mis on alati tõsi, olenemata sellest, kuidas te seda rakendate. Minu jaoks tähistab see (tavaliselt) rakenduse domeeni - teemat.

Minu viimane näide on

kasutajaliidese kasutajaprofiilid {
  Valikuline  laadimine (UUID accountNumber);
}

Kõnekood annab konto ID ja saab profiili tagasi, kui see on saadaval.

Praegu on süsteemil üleminekul paar rakendust. Abstraktsest klassist võib siin abi olla.

Abstraktne klass esindab minu jaoks kohandatavat mehhanismi. See ei ole teema osa. Klient ei peaks lootma pakutavate teenuste lubadusele.

See on osa rakendamisest. Täpsemalt, liidese kahe või enama võimaliku teostuse vahel jagatakse tavalist rakenduskoodi.

Meil võib olla abstraktne klass

abstraktne klass DatabaseUserProfiles rakendab UserProfiles {
  Valikuline  laadimine (UUID accountNumber) {
    Stringi andmebaasSpecificSql = getQueryFindByAccountNumber (accountNumber);

    tagastama executeQuery (databaseSpecificSql);
  }

  abstraktne String getQueryFindByAccountNumber (UUID accountNumber);
}

Selles väljamõeldud näites oleks meil paar SQL-i andmebaasi toodet, mida profiilide salvestamiseks toetasime. Andmebaasispetsiifilise SQL-i tagastamiseks kasutame GoF-i mallimalli getQueryFindByAccountNumber ().

Üldise SQL-andmebaasi kasutamise ühised osad asuvad mujal selles abstraktses klassis.

Jah, jah, mul oleks tegelikult liides - teema / kliendi lubadus - ja ABC (mõnikord) - jagatud juurutamine.

Kaks erinevat loetavuse eesmärki.

Ja jah, kuna Java 8/9/10 on mis tahes, on see rida sama hägune kui kunagi varem C ++ versioonis. Kuigi võite ABC-d kasutada mõlemal otstarbel, ei taha ma seda teha, kuna see ei edasta minu lugejale kood, mida ma tahan öelda.

Praegu tundub, et meil kõigil on natuke igav ja ma loodan, et liigume natuke tahvli juurde.


Vastus 2:

Ma arvan, et liides toetab mitut pärimist ja abstraktne klass mitte. Teine erinevus on see, et kõik liidese meetodid peavad olema abstraktsed.

Liides on tegelikult abstraktsem kui abstraktne klass ise. Kui teil oleks vaja, võite isegi luua liidese, mis laiendab mitut muud liidest.

Liides on ülim abstraktne klass. Abstraktne klass on hübriid liidese ja betooni klassi vahel.

Abstraktne klass võib sisaldada konkreetseid meetodeid ja seega võib mitmekordne pärimine tekitada konkreetsete meetodite mitmetähenduslikke tühistamisi, mis aga ei kehti abstraktsete meetodite tühistamise korral, kuna abstraktsed meetodid on tühjad, kui see on mõistlik, ja seega võimaldab Java liideste jaoks ainult mitut pärimist.

Kui vaatate Java-kogude hierarhiat, näete, kuidas liidesed muudavad graafiku atsükliliseks nagu Giti-puu, mitte binaarseks, nagu oleks siis, kui liideseid ei kasutataks.


Vastus 3:

Ma arvan, et liides toetab mitut pärimist ja abstraktne klass mitte. Teine erinevus on see, et kõik liidese meetodid peavad olema abstraktsed.

Liides on tegelikult abstraktsem kui abstraktne klass ise. Kui teil oleks vaja, võite isegi luua liidese, mis laiendab mitut muud liidest.

Liides on ülim abstraktne klass. Abstraktne klass on hübriid liidese ja betooni klassi vahel.

Abstraktne klass võib sisaldada konkreetseid meetodeid ja seega võib mitmekordne pärimine tekitada konkreetsete meetodite mitmetähenduslikke tühistamisi, mis aga ei kehti abstraktsete meetodite tühistamise korral, kuna abstraktsed meetodid on tühjad, kui see on mõistlik, ja seega võimaldab Java liideste jaoks ainult mitut pärimist.

Kui vaatate Java-kogude hierarhiat, näete, kuidas liidesed muudavad graafiku atsükliliseks nagu Giti-puu, mitte binaarseks, nagu oleks siis, kui liideseid ei kasutataks.


Vastus 4:

Ma arvan, et liides toetab mitut pärimist ja abstraktne klass mitte. Teine erinevus on see, et kõik liidese meetodid peavad olema abstraktsed.

Liides on tegelikult abstraktsem kui abstraktne klass ise. Kui teil oleks vaja, võite isegi luua liidese, mis laiendab mitut muud liidest.

Liides on ülim abstraktne klass. Abstraktne klass on hübriid liidese ja betooni klassi vahel.

Abstraktne klass võib sisaldada konkreetseid meetodeid ja seega võib mitmekordne pärimine tekitada konkreetsete meetodite mitmetähenduslikke tühistamisi, mis aga ei kehti abstraktsete meetodite tühistamise korral, kuna abstraktsed meetodid on tühjad, kui see on mõistlik, ja seega võimaldab Java liideste jaoks ainult mitut pärimist.

Kui vaatate Java-kogude hierarhiat, näete, kuidas liidesed muudavad graafiku atsükliliseks nagu Giti-puu, mitte binaarseks, nagu oleks siis, kui liideseid ei kasutataks.