2013-08-07 2 views
3

Je suis nouveau à Java (lire des livres depuis 4 mois maintenant). Donc, probablement, ma question peut paraître trop simple. Ma compréhension est que les méthodes abstraites n'ont pas un corps et ne peuvent pas fournir la mise en œuvreRésumé Les méthodes n'ont pas de corps?

Alors, comment cela fonctionne?

public abstract void fillRect (int x, int y, with, height); 

Je n'ai pas clairement indiqué la question. Nous avons une méthode abstraite. Pourquoi dessine-t-il un rectangle si je ne fournis pas de corps, juste des paramètres.

Par exemple

public void paint (Graphics g) { 

g.fillRect (5, 5, 30, 30); 

} 
+3

La plus probablement une classe héritée l'implémentera. Vous pouvez trouver plus d'informations [ici] (http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html) – ipeiro

+3

C'est comme demander - je sais "chat est un animal", mais comment "chat est un animal"? –

+3

Vous semblez manquer le point des méthodes abstraites – keyser

Répondre

2

Il y a deux choses que vous devez savoir

-Déclaration: Le prototype ou la structure de la méthode.

  ex:public int add(int a,int b) 

-defination: La déclaration de la méthode

  public int add(int a,int b){ 
      this.a=a; 
      this.b=b; 
      return a+b; 

      } 

maintenant une méthode abstraite peut avoir une structure déclaration i.e. ou prototype.But il ne peut pas avoir defination. La définition devrait être faite dans la classe qui étend la méthode abstraite contenant la classe.

   class A{ 
         public abstract int add(int a,int b); //just declaration- nobody 

        } 
      class B extends A{ 

       /*must override add() method because it is abstract in class A i.e class B must have a body or defination of add()*/ 
         int a,b; 
         public int add(int a,int b) { 
          this.a=a; 
          this.b=b; 
          return a+b; 
         } 
      } 
      } 
+0

désolé d'être une douleur. fillRect ne fournit pas de définition. Vous mettez les paramètres et dessine un rectangle –

+0

donc ça va comme ceci - (i) fillRect est déclaré dans la classe Graphics dans le paquet java.awt. (ii) La classe Applet étend la classe Graphics et a donc la définition de filRect(). (iii) Maintenant vous étendez la classe Applet, vous pouvez simplement donner les paramètres et le corps de fillRect() dans la classe Applet est utilisé. Je m'attends à ce que cela soit correct. Mais je suggère de faire quelques recherches ... –

7

Also read docs

Quand une classe abstraite est sous-, la sous-classe fournit habituellement mises en œuvre pour toutes les méthodes abstraites de la classe parente. Cependant, si ce n'est pas le cas, la sous-classe doit également être déclarée abstraite.

0

Vous pouvez voir les classes abstraites et les méthodes abstraites comme une sorte de contrat. Si vous avez une classe abstraite (toute classe avec une méthode abstraite devient une classe abstraite), vous ne pouvez pas créer un objet de cette classe.

Vous pourriez vous demander quelle est l'utilisation des classes abstraites dans un tel cas. C'est là que le contrat entre en jeu. Disons que vous avez un véhicule de classe, avec un entraînement de méthode. Vous voulez que tous les véhicules puissent conduire, mais vous ne savez pas encore comment (une voiture roule différemment d'un vélo).

Voilà pourquoi vous créez la méthode

public abstract void drive(); 

et mettre en œuvre dans votre voiture et les sous-classes Bycicle.

0

suivant

public abstract void fillRect (int x, int y, with, height); 

ne fonctionne pas avec classe abstraite seule seulement. Cela fonctionnera avec la sous-classe.

Créez une sous-classe de classe abstraite, puis remplacez-la par une implémentation.

1

En admettant que tous les animaux ont de 0 à n jambes:

abstract Class Animal{ 

    public abstract int legCount(); 

} 

Class Dolphin extends Animal{ 

    public int legCount(){ return 0; } 

} 

Class Cat extends Animal{ 

    public int legCount(){ return 4; } 

} 

Class Man extends Animal{ 

    public int legCount(){ return 2; } 

} 

Chaque espèce aura sa façon différente de compter les jambes/pattes - vous ne pouvez pas faire pour un abstrait animal, parce qu'il n'est pas un animal abstrait du tout, juste concret espèces individuelles.

1

Méthodes abstraites utilisées lorsqu'une méthode peut être implémentée dans plusieurs sous-classes avec des implémentations différentes.

La sous-classe est chargée de fournir une implémentation différente des méthodes abstraites.

Remarque: = Une classe abstraite étend une autre classe abstraite.

note: = Nous ne pouvons pas créer un objcet de classe abstraite.

1

Si une classe a une méthode abstraite, vous ne pouvez pas en créer un objet. Vous pouvez instancier un objet à partir d'une classe dérivée implémentant les méthodes abstact.

Cependant, vous pouvez spécifier qu'un argument d'une autre méthode/fonction est d'une « classe abstraite », par exemple,

doSomethingWithIt(MyAbstractClass argument);

et la méthode doSomethingWithIt repose uniquement sur le fait que l'objet passé à il fournit une implémentation des méthodes abstraites dans MyAbstractClass, mais il ne s'appuie pas sur dont la classe dérivée fournit cette implémentation. Par conséquent, les méthodes abstraites sont utiles, par exemple, si vous souhaitez utiliser différentes implémentations pour la même méthode.

Ceci est une technique de base de OO et je suppose que tous les livres le couvrent.

+0

Bonne réponse. Merci –

Questions connexes