Koks teisingas atsakymas į klausimą, koks yra pagrindinis sąsajos ir abstrakčiosios klasės interviu?


Atsakymas 1:

Žmogus gyvas, aš pusę jų pagimdžiau iki mirties.

Aš iš tikrųjų „nežinau atsakymo“, bet žinau, kokia mano nuomonė.

Aš naudoju sąsajas kaip pažadą paskambinti tuo, ko gali tikėtis. Tai yra abstrakcija - dalykas, kuris visada yra tiesa, nesvarbu, kaip tai įgyvendinsite. Man tai reiškia (paprastai) taikymo sritį - dalyką.

Naujausias mano pavyzdys yra

sąsaja „UserProfiles“ {
  Neprivaloma  apkrova (UUID accountNumber);
}

Skambinimo kodas pateikia sąskaitos ID ir atgauna profilį, jei jis yra.

Šiuo metu ji turi keletą įdiegimų, kai keičiame sistemą. Čia gali būti naudinga abstrakti klasė.

Abstrakti klasė reiškia „pritaikomą mechanizmą“. Tai nėra dalyko dalis. Klientas neturėtų pasikliauti teiktų paslaugų pažadu.

Tai yra įgyvendinimo dalis. Tiksliau sakant, tai yra bendras įdiegimo kodas, kuris yra pasidalinamas dviem ar daugiau galimų sąsajos įgyvendinimų.

Mes galime turėti abstrakčią klasę

abstrakti klasė „DatabaseUserProfiles“ įgyvendina „UserProfiles“ {
  Nebūtina  įkelti (UUID accountNumber) {
    Styginių duomenų bazėSpecificSql = getQueryFindByAccountNumber (accountNumber);

    grąžinti vykdomąją užklausą („databaseSpecificSql“);
  }

  abstrakti eilutė getQueryFindByAccountNumber (UUID accountNumber);
}

Šiame išgalvotame pavyzdyje turėtume porą SQL duomenų bazės produktų, kuriuos palaikėme, kad išsaugotume profilius, ir naudokime „GoF“ šablono metodu „getQueryFindByAccountNumber () tam, kad grąžintume duomenų bazės specifinį SQL.

Bendrosios bendrosios SQL duomenų bazės naudojimo dalys būtų kitur šioje abstrakčioje klasėje.

Taigi, taip, aš iš tikrųjų turėčiau sąsają - dalyko / kliento pažadą - ir ABC (kartais) - bendrą įgyvendinimą.

Du skirtingi skaitomumo tikslai.

Ir taip, kadangi „Java 8/9/10“ bet kokia, ši eilutė yra tokia neryški, kaip kada nors buvo „C ++“. Nors jūs galite naudoti „ABC“ abiem tikslams, nenoriu, nes ji neperduoda mano skaitytojui koduok tai, ką noriu pasakyti.

Tikiuosi, kad šiuo metu visi atrodo šiek tiek atsibodę ir pereiname prie šiek tiek lentos.


Atsakymas 2:

Manau, sakyčiau, kad sąsaja palaiko daugialypį paveldėjimą, o abstrakti klasė - ne. Antras skirtumas - visi sąsajos metodai turi būti abstraktūs.

Sąsaja iš tikrųjų yra abstraktesnė nei pati abstraktioji klasė. Jei jums to reikėjo, netgi galite sukurti sąsają, praplečiančią kelias kitas sąsajas.

Sąsaja yra aukščiausia abstrakčių klasė. Abstraktioji klasė yra sąsajos ir betono klasės hibridas.

Abstrakčioje klasėje gali būti konkrečių metodų, todėl daugialypis paveldėjimas gali sukelti dviprasmiškų konkrečių metodų nepaisymą, o tai netaikoma abstrakčių metodų nepaisymui, nes abstraktūs metodai yra neteisingi, jei tai yra prasminga, todėl Java leidžia sąsajoms paveldėti tik kelis kartus.

Pažvelgę ​​į „Java“ kolekcijų hierarchiją, pamatysite, kaip sąsajos daro diagramą aciklinę kaip „Git“ medis, o ne dvejetainę, kaip būtų, jei sąsajos nebūtų naudojamos.


Atsakymas 3:

Manau, sakyčiau, kad sąsaja palaiko daugialypį paveldėjimą, o abstrakti klasė - ne. Antras skirtumas - visi sąsajos metodai turi būti abstraktūs.

Sąsaja iš tikrųjų yra abstraktesnė nei pati abstraktioji klasė. Jei jums to reikėjo, netgi galite sukurti sąsają, praplečiančią kelias kitas sąsajas.

Sąsaja yra aukščiausia abstrakčių klasė. Abstraktioji klasė yra sąsajos ir betono klasės hibridas.

Abstrakčioje klasėje gali būti konkrečių metodų, todėl daugialypis paveldėjimas gali sukelti dviprasmiškų konkrečių metodų nepaisymą, o tai netaikoma abstrakčių metodų nepaisymui, nes abstraktūs metodai yra neteisingi, jei tai yra prasminga, todėl Java leidžia sąsajoms paveldėti tik kelis kartus.

Pažvelgę ​​į „Java“ kolekcijų hierarchiją, pamatysite, kaip sąsajos daro diagramą aciklinę kaip „Git“ medis, o ne dvejetainę, kaip būtų, jei sąsajos nebūtų naudojamos.


Atsakymas 4:

Manau, sakyčiau, kad sąsaja palaiko daugialypį paveldėjimą, o abstrakti klasė - ne. Antras skirtumas - visi sąsajos metodai turi būti abstraktūs.

Sąsaja iš tikrųjų yra abstraktesnė nei pati abstraktioji klasė. Jei jums to reikėjo, netgi galite sukurti sąsają, praplečiančią kelias kitas sąsajas.

Sąsaja yra aukščiausia abstrakčių klasė. Abstraktioji klasė yra sąsajos ir betono klasės hibridas.

Abstrakčioje klasėje gali būti konkrečių metodų, todėl daugialypis paveldėjimas gali sukelti dviprasmiškų konkrečių metodų nepaisymą, o tai netaikoma abstrakčių metodų nepaisymui, nes abstraktūs metodai yra neteisingi, jei tai yra prasminga, todėl Java leidžia sąsajoms paveldėti tik kelis kartus.

Pažvelgę ​​į „Java“ kolekcijų hierarchiją, pamatysite, kaip sąsajos daro diagramą aciklinę kaip „Git“ medis, o ne dvejetainę, kaip būtų, jei sąsajos nebūtų naudojamos.