class MyClass
def public_method
puts "这是一个public方法"
end
protected
def protected_method
puts "这是一个protected方法"
end
private
def private_method
puts "这是一个private方法"
end
end
# 在类外部调用
obj = MyClass.new
obj.public_method # 可以直接调用public方法
# obj.protected_method # 报错,不能在类外部直接调用protected方法
# obj.private_method # 报错,不能在类外部直接调用private方法
class SubClass < MyClass
def call_methods
public_method # 子类可以调用父类的public方法
protected_method # 子类可以在其内部调用父类的protected方法
# private_method # 报错,子类不能在其内部调用父类的private方法
end
end
sub_obj = SubClass.new
sub_obj.call_methods
sub_obj.public_method # 子类实例可以在外部调用从父类继承的public方法
# sub_obj.protected_method # 报错,子类实例不能在外部调用从父类继承的protected方法
- 在类外部调用规则:
- public方法:可以通过类的实例直接调用。
- protected方法:不能在类外部直接调用,即使是通过实例对象也不行。
- private方法:同样不能在类外部直接调用,即使是通过实例对象也不行。
- 在子类中调用规则:
- public方法:子类可以直接调用从父类继承的public方法,子类实例在外部也可以调用这些方法。
- protected方法:子类可以在其内部调用从父类继承的protected方法,但子类实例不能在外部调用这些方法。
- private方法:子类不能在其内部调用从父类继承的private方法,子类实例更不能在外部调用。