Die Elemente eines enums mit Methoden ausstatten?

Katzehuhn

Erfahrenes Mitglied
Kann ich den Elementen eines enums eigene methoden zuweisen? Indem Fall den FISCH eine andere Methode als zb dem VOGEL
Also:
Code:
public enum tiere{

FISCH(
public void geräusch(){
System.out.println("miao");
}
),FROSCH(),VOGEL(
public void fliegen(){
//nix
}
);

}
Dummes Beispiel ich weis, aber bilde mir ein sowas irgend wo mal gelesen zu haben und würde das jetzt brauchen^^
 
Du kannst nur der Enum an sich Eigenschaften und Methoden mitgeben, nicht jedoch den einzelnen Ausprägungen, da diese einfach nur konstante Objeke darstellen.

Gruß
Ollie
 
Was du suchst ist eher Objektorientiertes programmieren....wie es mir scheint^^

d.h.: Du hast ein Oberklasse Tiere, von der leiten dann die einzelnen Tiere also Klassen (oder Tierarten z.B. Vögel) ab (Stichwort: extends)

In der Oberklasse Tiere kannst du dann Methoden für jedes Tier machen.
In der Unterklasse Vogel kannst du dann Methoden speziell für Vögel machen (z.B. fliegen)
 
Java:
abstract class ATiere{
   public void lautGeben(){
    //...
  }

  abstract void laufen(){
  }
}


public class Vogel extends ATiere {
  
  @override
  public void laufen(){
    //...
  }
}


public class Hunde extends ATiere{
  
  @override
  public void laufen(){
    //...
  }
}

// Irgend ne andere Klasse:
public class XY(){

  public void blub(){
    Vector v = new Vector();
    Hund hund= new ATiere();
    Vogel vogel= new ATiere();
    v.add(hund);
    v.add(vogel);

    for (int i=0; i < v.size(); i++){
      ATier tier = (ATier)v.get(i);
      tier.lautGeben();
    }   
  }
}

Die Objekte packst du dann in einen Vectror oder eine Enumeration und kannst sie dann allseits durchlaufen
 
Zuletzt bearbeitet:
Das geht auch wunderbar mit einem enum:

Java:
public enum Animals {

	FISH {
		public void sound() {
			System.out.println("blubb");
		}
	}
	,
	FROG {
		public void sound() {
			System.out.println("quak");
		}
	},
	BIRD {
		public void sound() {
			System.out.println("piep");
		}
	};

	public abstract void sound();

}

Enums werden in normale Klassen umgewandelt die die Klasse Enum erweitern. Somit kann man auch Methoden definieren. Aufgrund der besonderen Struktur müssen jedoch alle Elemente die selben Methoden aufweisen. Aber du könntest diese Methoden ja durchauchs leer lassen wenn sie nichts tun sollen. Oder noch Methoden wie canFly hinzufügen, die angeben ob die Methode fly ausführbar wäre.
 
Zuletzt bearbeitet:
Zurück