automatischer Downcast?

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
hi community,

ich hab ein problem.
ich hab eine oberklasse animal und die unterklassen dog und cat.

eine methode nimmt aber nur animal-instanzen auf.
so, in der methode will ich jetzt herauskriegen, ob das objekt, was übergeben wurde eine dog-instanz ist.
geht das irgendwie einfacher als mit einer schleife durch die unterklasse von animal durchzugehen?

danke, mikachu
 
meinst du das
Code:
if (hund instanceof Dog) {
			System.out.println("ich bin ein hund und keine katze");
			
		}
 
Code:
public void streicheln(Animal animal) {
    if(animal instanceof Dog) {
        System.out.println("Braver Hund!");
    }
}

mpG
Tobias
 
nicht ganz.

Code:
Dog dog = new Dog(); // ist ein Animal (class Dog extends Animal)
myQueue.add( dog ); // nimmt nur Instanzen von Animal
...
Animal anAnimal = myQueue.get( 0 ); // dog, aber als Animal
Dog dog = (Dog) anAnimal; // so, ABER, es kann ja auch sein, dass anAnimal ein Cat-Objekt ist.

weil bis jetzt muss ich mit einer schleife durch die ganzen unterklassen gehen, uns gucken, ob dog eine instanz von der aktuellen unterklasse ist.
und das verhalten wollte ich vermeiden!

---

aber ein arbeitskollege hat grad die sache mit isAssignableFrom(XXX) erwähnt, und damit gehts.

danke
 
Tobias hat gesagt.:
Code:
public void streicheln(Animal animal) {
    if(animal instanceof Dog) {
        System.out.println("Braver Hund!");
    }
}

mpG
Tobias

nett gedacht, aber ich will das objekt in der methode weiternutzen...
 
Also meine Katzen würde ich wie folgt modellieren:

Code:
class Cat {

   public void sitz() {
       Random r = new Random();
       if(r.nextInt(99) < 5) {
          position = Cat.SITZ;
       }
       else {
           guckBesitzerAnAlsWolltestDuSagenBistDuJetztTotalBescheuert();
       }
   }

}

mpG
Tobias
 
das ist ja nur ein beispiel. die dog-klasse stellt spezielle methoden bereit, die ich in der methode aufrufen will.
Dann ergibt es doch wenig Sinn, eine Collection zu haben die Animals hält, oder?

Sorry, aber da "beisst sich die Katze selber in den Schwanz"
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben