John Maclean wrote:
> Thanks for another fast response. Inheritance - I'm going to get this
> -tonight-!
>
> recap;
> # the parent class
> cat fx/ruby/chap3/class_Song.rb
> #!/usr/bin/env ruby
> class Song
> def initialize(name, artist, duration)
> # define instance variables
> @name = name
> @artist = artist
> @duration = duration
> end
>
> def to_s
> # method for displaying these instancess
> "Song: #@name--#@artist (#@duration)"
> end
> end
>
> # the child class
>
> jayeola@tp20$ cat fx/ruby/chap3/class_KaraokeSong.rb
> #!/usr/bin/env ruby
> require 'class_Song.rb'
>
> # test if this class has been loaded correctly
> Object.const_defined?(:Song)
>
> class KaraokeSong < Song
> def initialize(name, artist, duration, lyrics)
> super(name, artist, duration)
> @lyrics = lyrics
> end
>
> def to_s
> super + " [#@lyrics]"
> end
> end
>
> #song = KaraokeSong.new("My Way", "Sinatra", 225, "And now, the...")
> #song = KaraokeSong.new("Sinatra", 225, "And now, the...")
> #song.to_s
> #song.inspect
>
>
> How do we get KaraokeSong to acquire it's parent's attributes -without-
> hadrcoding "def initialize(name, artist, duration, lyrics)", unless one
> has to? From the book I get the impression that you can get away with
> specifying the child's stuff and that it will take properties from it's
> parent with the keyword super....
If the child needs additional parameters (or otherwise overrides
the corresponding method in the parent class), you must* define
the method in the child (super will run the parent's method like
in your #initialize above). When the parent's behaviour is adequate,
you do not need to define a method, it is automatically inherited.
An alternative would be to just have an accessor for @lyrics; that
way you would not need to define #initialize, but you would need to
call #lyrics= to set the lyrics initially., which on the surface
would seem the more cumbersome way.
E
* Not strictly true; you could circumvent this with some careful
metaprogramming but it really is not worth it in this situation.
--
Posted via http://www.ruby-forum.com/.