automatischer Downcast?

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
 

ARadauer

Top Contributor
meinst du das
Code:
if (hund instanceof Dog) {
			System.out.println("ich bin ein hund und keine katze");
			
		}
 

Tobias

Top Contributor
Code:
public void streicheln(Animal animal) {
    if(animal instanceof Dog) {
        System.out.println("Braver Hund!");
    }
}

mpG
Tobias
 

mikachu

Top Contributor
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
 

mikachu

Top Contributor
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...
 

Tobias

Top Contributor
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
 
M

maki

Gast
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.

Ähnliche Java Themen

Neue Themen


Oben