为什么ruby允许子类访问父类';什么是私人方法? 主类 打个招呼 “你好” 结束 私有的 打个招呼 “嗨” 结束 结束 类子类
输出: 嗨 测试为什么ruby允许子类访问父类';什么是私人方法? 主类 打个招呼 “你好” 结束 私有的 打个招呼 “嗨” 结束 结束 类子类,ruby,oop,Ruby,Oop,输出: 嗨 测试 不同之处在于,在ruby中,可以隐式而非显式地调用子类中的私有方法。Protected可以双向调用。为什么呢?我想你得问问Matz 例如: class Main def say_hello puts "Hello" end private def say_hi puts "hi" end end class SubMain <
不同之处在于,在ruby中,可以隐式而非显式地调用子类中的私有方法。Protected可以双向调用。为什么呢?我想你得问问Matz 例如:
class Main
def say_hello
puts "Hello"
end
private
def say_hi
puts "hi"
end
end
class SubMain < Main
def say_hello
puts "Testing #{say_hi}"
end
end
test = SubMain.new
test.say_hello()
类TestMain
受保护的
戴夫·萨伊·霍拉
“你好”
结束
你说什么
“倪浩”
结束
私有的
打个招呼
“嗨”
结束
你好
“你好”
结束
结束
类submin
它继承了该方法。为什么你认为不应该允许它调用它?@spickermann,因为OOP行为通常就是这样工作的。私有方法是私有的,这是有原因的。如果我们允许子类访问受保护方法和私有方法,那么它们之间就没有区别了。@CodeCrack:有一个非常重要的区别。不能在接收方上调用私有方法,即使接收方是self
。如果接收方属于同一类或祖先类,则可以在接收方上调用受保护的方法。一个经常引用的例子是比较:def(其他);自我价值、他人价值;end
必须将值设置为public或protected,因为不能在另一个对象上访问私有值。Ruby“private”与Java中的“protected”差不多;这是一个术语上的转变,我同意Ruby的可见性不同于其他编程语言,比如Java。但我不会因此认为这是错误的。如果你想掌握多种语言,你就必须学习不同语言之间的差异,而按照其他语言的做法去做是不太可靠的。PHP默默地忽略01398
中的98
,生成11
;没有理由认为其他语言对整数的解析也同样糟糕。Ruby有自己的对象模型,不是从Java或PHP复制的;它满足面向对象范式的所有要求;应该根据自己的条件来学习。
class TestMain
protected
def say_hola
puts "hola"
end
def say_ni_hao
puts "ni hao"
end
private
def say_hi
puts "hi"
end
def say_bonjour
puts "bonjour"
end
end
class SubMain < TestMain
def say_hellos
# works - protected/implicit
say_hola
# works - protected/explicit
self.say_ni_hao
# works - private/implicit
say_hi
# fails - private/explicit
self.say_bonjour
end
end
test = SubMain.new
test.say_hellos()