Scritto da Alex Rodríguez
Codifica Learnrapragramar.com: CU00696B
Concetto di più interfaccia ed ereditarietà in Java. Implementi.
nelle sezioni precedenti del tutorial abbiamo studiato i concetti di ereditarietà e polimorfismo. Finora abbiamo considerato scenari in cui una classe eredita solo da un’altra classe. Sarebbe possibile sollevare uno scenario in cui una classe eredita da più di una classe (più eredità)?
Il profilo della figura precedente rappresenterebbe che ci sarebbero classi come professormerito che erediterebbero due classi: professore e docente. Questo sarebbe un caso di più eredità e rappresenterebbe che la sottoclasse condivide le caratteristiche delle due superclasse e ha anche le sue caratteristiche specifiche. Più eredità, per la coerenza dei programmi e delle lingue ha una complessità relativamente elevata. Quindi, alcune lingue orientate agli oggetti lo permettono che gli altri non lo fanno. Java non consente più eredità, ma in cambio ha la costruzione chiamata “interfaccia” che consente una forma di simulazione limitata o implementazione di più ereditarietà.
Abbiamo già già stato discusso il concetto di interfaccia in allusione alla firma dei metodi o delle informazioni pubbliche delle classi. Abbiamo anche fatto una primissima approssimazione all’interfaccia a Giava, e come simile, abbiamo detto che potrebbe essere considerato come un regolamento di urbanismo in una città. Andiamo ad approfondire il concetto di interfaccia all’interno di Java. Un’interfaccia è una costruzione simile a una classe astratta in Java, ma con le seguenti differenze:
a) Nell’intestazione viene utilizzata l’interfaccia delle parole chiave al posto della classe di classe o astratta. Ad esempio, interfaccia pubblica Nameninterface {…}
b) Ogni metodo è astratto e pubblico senza bisogno di dichiararlo, cioè, non è necessario mettere pubblici astratti Che per default tutti i metodi sono pubblici astratti. Pertanto un’interfaccia in Java non implementa nessuno dei metodi che dichiara: nessuno dei tuoi metodi ha un corpo.
c) Le interfacce non hanno alcun costruttore.
D) Un’interfaccia supporta solo i campi di tipo “Public Static Final”, cioè, campi di classe, pubblico e costante. Non c’è bisogno di includere le parole finali pubbliche statiche perché tutto I campi saranno trattati come se prenderebbero queste parole. Ricorda che statico era equivalente a “classe” e alla finale a “costanti”. Le interfacce possono essere un luogo interessante per dichiarare costanti che saranno utilizzati da classi diverse nei nostri programmi.
e) Una classe può derivare da un’interfaccia nello stesso modo in cui può derivare da un’altra classe. Tuttavia, si dice che l’interfaccia sia implementata (attrezzi), Non si estende (estendere) per le sue sottoclassi. Pertanto per dichiarare l’ereditarietà di un’interfaccia, viene utilizzata l’implegazione delle parole chiave Ents invece di estendere.
Una classe può essere implementata una o più interfacce in Java (è indicato con gli implementsInterface1, NameInface2, … ecc.), Ma può estendere solo una classe. L’implementazione di diverse interfacce in una singola classe è la cosa più vicina che Java ha in più ereditarietà.
Possiamo dichiarare variabili del tipo di interfaccia, ma per inizializzarli useremo una classe specifica che lo implementa Ad esempio Elenco < String Millist; Dichiara una variabile con il tipo di interfaccia di elenco. Inizializzazione Millist = Nuova lista < String (); Non è possibile perché non è possibile creare un oggetto del tipo definito da un’interfaccia. In Cambia Milista = New LinkedList < String (); sì è valido.
Diremo che un’interfaccia in Java definisce un tipo i cui metodi sono tutti senza implementazione e che è equivalente a un’ereditarietà multipla (classi astratte) in una classe.Se una classe implementa un’interfaccia, può accadere:
a) che ha implementato i metodi dell’interfaccia che li sovraccarono (può essere una classe specifica).
b) che non implementazione dei metodi dell’interfaccia: sarà una classe astratta e deve essere eseguita dall’astratto della parola chiave sul suo intestazione per indicarlo.
Considera un diagramma di classi come questo , che potrebbe utilizzare per un programma di gestione in un centro educativo:
Vediamo che le interfacce sono identificate da BlueJ con < < interfaccia > sulla parte superiore della tua icona. All’interno di queste classi, le relazioni sono determinate dal presente Codice:
Interfaccia pubblica Attore {…}: Definisce l’attore dell’attore approcatorapragragar.com Interfaccia.
Public Abstract Class Person Attuale Attore {…}: Definisce la classe astratta come implementazione dell’interfaccia dell’attore.
Professore di classe pubblica estende la persona {…} : Definisce la classe insegnante come estensione della classe di classe.
Studente di classe pubblica estende la persona {…}: Definisce la classe dello studente come un’estensione della classe della persona.
Public Public Oggetto oggetto di interfaccia.
Implementi di veicoli di classe Public Class Attore, Objorinerte {…}: Definisce che la classe del veicolo implementa due interfacce, l’interfaccia dell’attore e l’interfaccia dell’oggetto, cioè che un veicolo è contemporaneamente attore e objointe.
La macchina pubblica auto estende il veicolo DS Veicolo {…}: Definisce la classe della bicicletta come estensione della classe del veicolo.
Una classe può ereditare da un altro e attuare una o più interfacce. In questo caso, in primo luogo, la relazione di ereditarietà è posta sulla superclasse e poi le interfacce che implementa. Ad esempio in questo schema:
La definizione della classe dell’albero sarebbe come questa: l’albero di classe pubblica estende gli attrezzi di verdure attore {…}. La classe eredita da vegetale e attrezzi attore.
Come sapere se una classe è un candidato da definire come un’interfaccia?
a) Se abbiamo bisogno di qualsiasi metodo con il corpo, sappiamo già che non sarà un’interfaccia perché tutti i metodi di un’interfaccia devono essere astratti.
b) Se abbiamo bisogno di una classe” ereditata “di più di una superclasse, quelle superclasse sono candidati per essere interfacce.
c) in alcuni Casi È altrettanto praticabile che definisce una classe come un’interfaccia che come classe astratta, ma posta in questa situazione preferirà optare per un’interfaccia perché è più flessibile ed estensibile: ci consentirà di implementare diverse interfacce (approfittiamo dell’eredità multipla delle interfacce). Invece, una classe non può ereditare diverse classi.
Ricorda che il campo S dichiarato sono i campi statici anche se non è specificamente indicato:
Interfaccia pubblica Attore {
int attivo = 1; int inattivo = 0; // … resto del codice di interfaccia Esempio Learnrapragramar.com }
In questo caso attivo e inattivo si comportano come finale statico pubblico (costante) per tutte le classi che implementano questa interfaccia.
Qual è uno degli interessi principali dell’utilizzo delle interfacce? Essere in grado di utilizzare il polimorfismo: ad esempio essere in grado di raccogliere in un oggetto di raccolta del tipo di interfaccia, ma che sono implementati in diversi tipi. O essere in grado di trattare oggetti di diversi tipi ma appartengono allo stesso supertipo perché implementano un’interfaccia.
Esercizio
Risponde Le seguenti domande:
a ) È una classe che eredita due classi in Java?
B) Un’interfaccia Java può avere metodi che includono un dritto?Un’interfaccia Java può avere metodi che includono una dichiarazione di sistema.out.println?
c) è un oggetto Java del tipo definito da un’interfaccia? Un oggetto Java può essere allo stesso tempo del tipo definito da un’interfaccia e dal tipo definito da una classe che non implementa l’interfaccia? Un oggetto Java può essere allo stesso tempo del tipo definito da un’interfaccia e dal tipo definito da una classe che implementa l’interfaccia?
per verificare se le tue risposte sono corretto è possibile consultare nei forum learnrapragramar.com.