The New Method and Override
BlitzMax Forums/BlitzMax Beginners Area/The New Method and Override
| ||
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 |
| ||
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 |
| ||
I believe they are called recursively, intentionally. So you wouldn't have to remember to call the parent types constructor yourself. |
| ||
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. |
| ||
cool, I still think these things could be documented for us n00b programmers. |