# enum und Vererbung



## Clip (31. Aug 2006)

Hallo!

ich habe zwei Klassen (A,B), wobei B A erbt. In A ist ein enum Feld ImageSize. B hat ebenfalls ein enum ImageSize. In A gibt es eine Methode zum setzen bestimmer Parameter die in Abhängigkeit zum enum Feld gesetzt werden. 
Jetzt möchte ich, dass wenn ich ein Object der Klasse B habe, das dieses Object die Methode in der Elternklasse A mit seinem ImageSize enum Feld durchführt. 
Wie geht das? geht das überhaupt?
A:

```
public class BasicImageProvider {
	
	protected enum ImageSize {	
		SMALL("Icons/16x16/") ,
		MEDIUM("Icons/24x24/") ,
		BIG("Icons/32x32/"),
		HUGE("Icons/48x48/") ;	
		private String name;
		private ImageSize(String name ){
		   this.name = name;
		}
		public String getName(){
		   return name;
		}		
	}

	public BasicImageProvider(String image, BasicImageSize size) {
		this.image = image;
		setSize(size);
	}

// code .....
```

Die Methode welche dafür da ist Größe zu setzten, und von B indirekt durch den Konstruktoraufruf von A angesprungen wird:

```
protected void setSize(BasicImageSize size){
		switch (size) {
		case SMALL:
			imageSize = ImageSize.SMALL;
			break;
		case MEDIUM:
			imageSize = ImageSize.MEDIUM;
			break;		
		case BIG:
			imageSize = ImageSize.BIG;
			break;		
		case HUGE:
			imageSize = ImageSize.HUGE;
			break;						
		default:
			imageSize = ImageSize.MEDIUM;
		}		
	}
```

und B mit dem enum ImageSize in dem die Pfadangaben etwas anders sind Dieses Feld soll in der oberen Methode bekannt sein:

```
public class RackImageProvider extends BasicImageProvider implements IRackImageKeys{
	
	private enum ImageSize {	
		SMALL("Icons/Rack/16x16/") ,
		MEDIUM("Icons/Rack/24x24/") ,
		BIG("Icons/Rack/32x32/"),
		HUGE("Icons/Rack/48x48/") ;	
		private String name;
		private ImageSize(String name ){
		   this.name = name;
		}
		public String getName(){
		   return name;
		}		
	}	
	
	private ImageSize imageSize;
		
	public RackImageProvider(String image, BasicImageSize size) {
		super(image, size);
	}
}
```


----------



## DEvent (31. Aug 2006)

Was soll dieses Wirrwarr ?
Mach doch einfach ImageSize öffentlich und benutze es konzequent für alles.
BasicImageProvider.ImageSize und RackImageProvider.ImageSize haben doch eh die selben Enum-Felder.

Protected heißt, das es sichtbar ist im selben package und in einer Subklasse.
Also fremde Klassen können nur dann BasicImageProvider.ImageSize sehen, wenn sie im selben package sind.


----------



## byte (1. Sep 2006)

Enums sind immer per default public static, völlig egal was Du da ranschreibst. Der Zugriff erfolgt genauso wie bei normalen public static Methoden oder Variablen. Wenn die beiden Enums bei Dir eh identisch sind, dann kannst Du Dir eine von beiden schenken. Und dann könntest Du auch gleich überlegen, ob Du die Enum in ne eigene Datei auslagerst.


----------



## DEvent (1. Sep 2006)

byto hat gesagt.:
			
		

> Enums sind immer per default public static, völlig egal was Du da ranschreibst. Der Zugriff erfolgt genauso wie bei normalen public static Methoden oder Variablen. Wenn die beiden Enums bei Dir eh identisch sind, dann kannst Du Dir eine von beiden schenken. Und dann könntest Du auch gleich überlegen, ob Du die Enum in ne eigene Datei auslagerst.


hm muss ich mal ausprobieren. Ich hatte Enums noch nie was anderes als public.


----------

