2015-05-18 57 views
9
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()  

OUTPUT:为什么ruby允许子类访问父类的私有方法?

测试

+0

它继承该方法。你为什么认为它不应该被称为它? – spickermann

+0

@CanadianCoder我认为在一个被声明为private的类的OOP成员不会被该类的子类继承。至少在Java和PHP中,这是我相信的。 – CodeCrack

+0

刚开始自己​​学习Ruby,不得不说在阅读“Ruby之书”时,这个想法似乎有点模糊,如果没有误导给出的行为,但也许这只是我。是的,Java不允许子类访问超级的私有方法。 – ChiefTwoPencils

回答

9

不同的是,在Ruby中,你可以隐而不调用私有方法在子类中明确。受保护的可以称为两种方式。至于为什么?我想你不得不问马茨。

实施例:

class TestMain 

    protected 
    def say_bueno 
    puts "bueno" 
    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_bonjour 
    # 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() 
相关问题