我想限制超类的方法在子类
中的访问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
这里我得到儿子的全名“Harry Smith”,但我想“Harry Chipli”
答案 0 :(得分:4)
在父级的初始化方法中:
@first_name, @last_name = [first_name, last_name]
试试这个
和
class Son
def attr_reader :last_name
def last_name=(name)
@last_name ||= name
end
end
这样,如果儿子没有从父母那里设置名字(适合孤儿),它只会定义姓氏。
答案 1 :(得分:0)
class Son < Parent
attr_accessor :first_name
...
private
attr_accessor :last_name
end
应该这样做。
答案 2 :(得分:0)
您可以重新定义last_name setter:
Class Son < Parent
...
def last_name=(name)
end