The New Method and Override

BlitzMax Forums/BlitzMax Beginners Area/The New Method and Override

Jay Kyburz(Posted 2005) [#1]
Hi,

I discovered over the weekend that the New method is not overridden and will run for each ancestor. I think it would be great if this was mentioned somewhere in the "User Defined Types" section of the language reference.

For Example:


Strict

Type tOne

	Field x:String = "x"

	Method New ()	
		Self.x = "x Parent"
	End Method

	Method Override()
		Self.x = "Override Parent"
	End Method

End Type


Type tTwo Extends tOne

	Field y:String = "y"
	
	Method New ()
		Self.y = "y Child"
	End Method
	
	Method Override()
		Self.x = "Override Child"
	End Method

End Type


Global one:tOne = New tOne
Global two:tTwo = New tTwo

Print one.x

Print two.x
Print two.y


one.override
two.override

Print one.x
Print two.x


outputs

x Parent
x Parent
y Child
Override Parent
Override Child


Jay Kyburz(Posted 2005) [#2]
Another interesting point..

You can run parent versions of overridden methods in new method.

Type tOne

	Field x:String = "x"

	Method New ()	
		Self.Override()
	End Method

	Method Override()
		Self.x = "Override Parent"
	End Method

End Type


Type tTwo Extends tOne

	Field y:String = "y"
	
	Method New ()
		Self.Override()
	End Method
	
	Method Override()
		Self.y = "Override Y"
	End Method

End Type


Global one:tOne = New tOne
Global two:tTwo = New tTwo

Print one.x

Print two.x
Print two.y



returns

Override Parent
Override Parent
Override Y


FlameDuck(Posted 2005) [#3]
I believe they are called recursively, intentionally. So you wouldn't have to remember to call the parent types constructor yourself.


kyoryu(Posted 2005) [#4]
Base constructors being called from a child is a standard feature in any OO language I've ever heard of. I'd be surprised if it did it any other way.


Jay Kyburz(Posted 2005) [#5]
cool,

I still think these things could be documented for us n00b programmers.