Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/03/2017, à 15:12

plouf1221

Incompréhension d'une expression java [RESOLU]

Bonjour,

Le code fonctionne aucun souci, juste un problème de compréhension dans la classe de Test, la dernière.

Ma classe abstraite Affichage :

abstract class Affichage {
	abstract public void  affiche ();
 }

Ma classe Entier :

public class Entier extends Affichage {
	
	private int valeur;
	
	public Entier (int n) {
		valeur = n;
	}
	
	public void affiche () {
		System.out.println("je suis un entier de valeur "+valeur);
	}
}

Ma classe Flottant :

public class Flottant extends Affichage {
	
	private float valeur; 
	
	public Flottant (float x) {
		valeur = x;
	}
	public void affiche () {
		System.out.println("Je suis un flottant de valeur "+valeur);
	}

}

Ma classe Test :

public class Test {
	
		public static void main(String[] args) {
			Affichage [] tab; //  COMMENT PEUT T'ON FAIRE UN TABLEAU DE AFFICHAGE ? C'est une classe et il n'y a qu'une  fonction abstraite dedans.
			tab = new Affichage [3];
			tab[0] = new Entier (25);
			tab[1] = new Flottant (1.25f);
			tab[2] = new Entier (42);
			
			int i;
			for (i = 0; i < 3; i++) {
				tab[i].affiche();
			}
		}
}

Dernière modification par plouf1221 (Le 18/03/2017, à 13:26)

Hors ligne

#2 Le 17/03/2017, à 21:19

jamesbad000

Re : Incompréhension d'une expression java [RESOLU]

new xxx[n] instancie un objet tableau vide (enfin, contenant des null), pouvant contenir n élément de type xxx. Il n'instancie aucun objet xxx.


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#3 Le 18/03/2017, à 11:19

plouf1221

Re : Incompréhension d'une expression java [RESOLU]

C'est quoi un tableau d'Affichage sachant que Affichage est un classe abstract avec une méthode abstract affiche () ?
On mets alors tout ce que l'on veut dans le tableau tant que l'on fait appel au constructeur d'une des filles.

Classe Flottant

public class Flottant extends Affichage {
	
	private float valeur; 
	private String chaine;
	
	public Flottant (float x) {
		valeur = x;
	}
	
	public Flottant ( String s ) {
		chaine = s;
	}
	public void affiche () {
		System.out.println("Je suis un flottant de valeur "+chaine);
	}
}

Classe de test

public class Test {
	
		public static void main(String[] args) {
			Affichage [] tab; // les classes sont comme des types generalisé
			tab = new Affichage [3];
			tab[0] = new Entier (25);
			tab[1] = new Flottant (1.25f);
			tab[2] = new Flottant("Bonjour le tableau");
			
			int i;
			for (i = 0; i < 3; i++) {
				tab[i].affiche();
			}
		}
}

Dans la console :
je suis un entier de valeur 25
Je suis un flottant de valeur null
Je suis un flottant de valeur Bonjour le tableau

Du coup dans mon tableau je peux mettre n'importe quoi en faites, entier, float, chaine de caractere, un autre tableau ...
Tant que je fait intervenir le constructeur d'une fille

Dernière modification par plouf1221 (Le 18/03/2017, à 11:23)

Hors ligne

#4 Le 18/03/2017, à 12:59

jamesbad000

Re : Incompréhension d'une expression java [RESOLU]

plouf1221 a écrit :

Du coup dans mon tableau je peux mettre n'importe quoi en faites, entier, float, chaine de caractere, un autre tableau ...

Non. Dans le tableau tu ne peux mettre que des instances de sous types d'Affichage. Après tout dépendant des propriétés que tu affecte aux sous types.

Seulement comme tu n'a défini ni comportement, ni propriété dans ta classe Affichage, ça devrait plutôt être une interface...
à la place de abstract Affichage => interface Affichable
=> public class Flottant implements Affichable

=> Affichable[] tab = new Affichable[3]

Dernière modification par jamesbad000 (Le 18/03/2017, à 13:00)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#5 Le 18/03/2017, à 13:30

plouf1221

Re : Incompréhension d'une expression java [RESOLU]

J'ai compris ce que tu veux me dire.
C'est quoi la différence entre une abstract et une interface.
Moi j'en connais qu'une c'est que tu peux avoir plusieurs interface à implémenté sur une mime classe,
alors que une classe abstract tu en as qu'une et une seule.
Es ce que y en  a d'autre ?
D’après ce que j'ai lu on peut définir une méthode abstract avec son corps dans la classe abstract.
Mais lorsque je le faits Eclipse me génère une erreur.
Je suis donc obligé dans chaque classe fille de définir la ou les méthodes abstracts sinon pareil Eclipse me génère une erreur.
Merci pour ton aide.

Hors ligne

#6 Le 18/03/2017, à 14:00

jamesbad000

Re : Incompréhension d'une expression java [RESOLU]

plouf1221 a écrit :

D’après ce que j'ai lu on peut définir une méthode abstract avec son corps dans la classe abstract.

Les méthodes qui ont un corps ne sont pas des méthodes abstraites, mais des méthodes concrètes. Il ne faut donc pas y mettre le mot clef abstract.

En principe une classe abstraite à un minimum de comportement (méthode concrète) et de propriétés (variables) définies. Et des méthodes abstraites qui te permettent de faire des choses particulières qui ne peuvent être prévues dans la classe abstraite.

Dernière modification par jamesbad000 (Le 18/03/2017, à 14:01)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne