Problem mit Typchecking

p-flash

Erfahrenes Mitglied
Hi,

ich habe eine Klasse EventObject:

PHP:
class ped.nazari.event.EventObject {
    // The source of the event.
    private var source:Object;
  
    /**
     * Constructor
     *
     * @param   src   The source of the event.
     */
    public function EventObject (src:Number) {
  	source = src;
    }
    
    /**
     * Returns the source of the event.
     */
    public function getSource ():Object {
  	return source;
    }
  }

Wenn ich zB jetzt schreibe:

var e:EventObject = new EventObject("hallo"); wird kein Type-Fehler angezeigt, obwohl eine nummer erwartet wird.

Das war nur ein Test. Eigentlich sollte es schon src:Object heißen, es wundert mich warum aber kein Fehler auftritt wenn da src:Number steht, obwohl ein String angegebenm wird.


2. Frage:

Wenn ich das Event jetzt erbe (dabei soll src:Object das richtige sein):
PHP:
  class ped.nazari.selfpingpong.WallEvent extends EventObject
  {
  	public var y:Number;
  	private var hitUp:Boolean;
  	public function WahlEvent(src:HitTester, y:Number, hitUp:Boolean)
  	{
  		trace(src);
  		super(src);
  		this.y = y;
  
  		this.hitUp = hitUp;
  		trace(hitUpLimit());
  		//trace("Wall event has been occured from the source......" + src);;
  		
  	}
  	
  	public function getY():Number
  	{
  		return y;
  	}
  	
  	public function hitUpLimit():Boolean
  	{
  		return hitUp;
  	}
  }

Jetzt schreibe ich

var w:WallEvent = new WallEvent(this, 4, true); // Es wird undefined getraced obwol src, übergegeben wird.

trace(w.y); // undefined obwohl 4 angeben wird.

Vor allem ist this die Zeitleiste und kein Objekt der Klasse HitTester, wie im Konstruktor angegeben, aber trotzdem findet kein Typfehler statt (s. 1. Frage).

Kann das jemand erklären?

Danke.

p-flash
 
Hmm

#1: Ich bekomme bei folgender Klasse:
PHP:
class Test2 {

	public function Test2(src:Number) {
		trace(src);
	}
}
Einen Typdiskrepanzfehler, wenn ich folgendes mache:
PHP:
import Test2;
var bla = new Test2("hallo");

#2: Die Zeitleiste ist vom Typ MovieClip, der von Object erbt. HitTester erbt auch von Object, das wird der Grund sein, warum Du im zweiten Beispiel keinen Fehler bekommst (Flash ist nicht soo streng wie andere Sprachen - obwohl ich zugebe, mir noch keine großen Gedanken darüber gemacht zu haben). Du kannst allerdings das übergebene Objekt mit "instanceof" auf den richtigen Typ prüfen:
PHP:
trace(src instanceof HitTester);

Gruß
.
 
Danke!

zu 2:

Es erben aber ja alle Klassen von Object, deshalb müsste es dann nie zu Typ-Fehler kommen. Ist das vllt ein Bug?

p-flash
 
Zurück