Il significato del metodo astratto? [duplicare]

0

Modifica : la differenza tra la mia domanda e Quali sono le differenze tra classi astratte, interfacce, e quando usarli , Quali sono le classi astratte e i metodi astratti? è che le risposte scelte non Si parla della parte del warning del compilatore. Si parla addirittura del riutilizzo del codice per ereditarietà, che in realtà è una cattiva pratica.

Penso che quello che voglio sapere sia oltre la lingua scelta. Ma, comunque, intendo il metodo astratto in Java. Dalla documentazione di Oracle:

An abstract method is a method that is declared without an implementation (without braces, and followed by a semicolon).

Ma quello che voglio veramente sapere è lo scopo reale di esso, non solo le regole semantiche .

Per me, lo scopo è che il compilatore mi dirà cosa devo fare in futuro. Prendi Eclipse come esempio, quando ricavo una sottoclasse da una classe astratta, Eclipse mi aiuterà ad aggiungere tutti i metodi non implementati con un clic.

Da un altro punto di vista, un metodo astratto renderà il metodo della versione super-class, che può avere una funzionalità di base, non più disponibile, sono sovrascritti . (Ho questa conclusione dal modello decoratore.)

Tuttavia, tutto quanto sopra è dal mio intuito. Qualsiasi consiglio è apprezzato.

    
posta Niing 23.03.2017 - 14:05
fonte

2 risposte

2

No, lo scopo è questo:

public void clientMethod(AbstractType param){
    param.abstractMethod();
}

Questo codice è che usa il metodo astratto senza dover sapere nulla su come è implementato o quale classe lo implementa.

L'esempio tipico sarebbe l'interfaccia Comparable , che contiene il metodo compareTo() . Ciò consente, ad esempio, Arrays.sort() per implementare un algoritmo di ordinamento senza dover sapere nulla di ciò che è l'ordinamento, solo che il metodo astratto dall'interfaccia è implementato.

    
risposta data 23.03.2017 - 14:12
fonte
0

Un metodo virtuale può essere sovrascritto da una sottoclasse, se lo desidera, ma non avere . La classe base fornisce un'implementazione "predefinita".

Un metodo astratto deve essere sovrascritto da una sottoclasse perché la classe base non può o non fornisce quell'implementazione "predefinita".

abstract class Person 
{ 
   public string introduction() 
   {
      "I am a " + getSpecies() + " called " + getName() + "."; 
   }

   protected string getSpecies()
   {
      return "human";
   } 

   protected abstract string getName(); 
} 

class FredFlintstone extends Person 
{
   protected string getName()
   {
      return "Fred";
   } 

}

Person person = new FredFlintstone(); 
string hiThere = person.introduction(); 
    
risposta data 23.03.2017 - 14:24
fonte

Leggi altre domande sui tag