1

サブクラスでスーパークラスのメソッドへのアクセスを制限したい

class Parent
  attr_accessor :first_name, :last_name

  def initialize(first_name, last_name)
    @first_name, @last_name = first_name, last_name
  end

  def full_name
  @first_name + " " + @last_name 
  end

end

class Son < Parent
  attr_accessor :first_name

  def initialize(parent, first_name)
    @first_name = first_name 
    @last_name = parent.last_name
  end

  def full_name
    @first_name + "  " + @last_name 
  end
end


p = Parent.new("Bharat", "Chipli")
puts p.full_name

s = Son.new(p, "Harry")
s.last_name= "Smith"
puts s.full_name

ここでは息子のフルネームを「 HarrySmith」としていますが、 「HarryChipli」が欲しいです。

4

3 に答える 3

4

親のinitializeメソッドで:

@first_name, @last_name = [first_name, last_name]

これを試して

と:

class Son
  def attr_reader :last_name

  def last_name=(name)
    @last_name ||= name
  end
end

このように、息子が親から設定された名前を持っていない場合にのみ、姓を定義します(孤児に適しています)。

于 2012-11-03T10:52:13.600 に答える
0
class Son < Parent
  attr_accessor :first_name

  ...

  private

  attr_accessor :last_name
end

それをする必要があります。

于 2012-11-03T09:35:56.787 に答える
0

last_nameセッターを再定義できます。

Class Son < Parent

...

def last_name=(name)
end
于 2012-11-03T10:50:35.993 に答える