2.2Ruby类型之类(Class)

1.类

1.1类声明

class 类名
  #类体
end

类声明是 Class 类的实例,类名就是存储这个实例的常量,因此在赋值后不可以通过重新赋值更改其值。

2.成员

2.1访问器属性

注意:Ruby 语言不支持类访问器属性。

#手动方式
class ClassWithGetSet
  def initialize(x, y)
    @x, @y = x, y
  end
  
  #实例getter
  def x
    @x
  end

  #实例getter
  def y
    @y
  end

  #实例setter
  def x=(value)
    @x = value
  end

  #实例setter
  def y=(value)
    @y = value
  end
end
#自动方式
class ClassWithGetSet
  #getter
  #注意:attr()是attr_reader()的简写。
  attr_reader(:x, :y)
  attr(:x, :y)

  #setter
  attr_writer(:x, :y)

  #getter和setter
  attr_accessor(:x, :y)
end

2.2构造方法

一个类非必须有构造方法。如果一个类没有构造方法,相当于定义了一个方法体为空的构造方法。如果一个类有多个构造方法,后定义的构造方法会覆盖先定义的构造方法。

class 类名
  def initialize()
    #构造方法体
  end
end

3.对象

3.1创建对象

#无实参
对象名 = 类名.new()

#有实参
对象名 = 类名.new(实参)

3.2方法重载(Overload)

Ruby 语言不支持方法重载。

3.3self关键字

如果在类上下文,则 self 关键字指向当前类。

如果在对象上下文,则 self 关键字指向当前对象。

4.访问成员

类名::类常量名
类名.类方法名()
对象名.实例访问器属性名
对象名.实例方法名()

5.继承

一个子类只可以直接继承自一个父类,不可以直接继承自多个父类。

子类会直接继承父类中可继承的成员,间接继承祖父类中可继承的成员,以此类推,直至没有可继承的成员。

支持的成员:类常量、类方法、实例访问器属性、实例方法、构造方法,不支持类变量、类实例变量、实例变量。

注意:从父类中继承过来的成员无需在子类中重新声明,否则会发生覆盖。

class 子类名 < 父类名
  #子类体
end

5.1覆盖(Override)

如果从父类中继承过来的成员在子类中重新声明,此时相当于在子类中同时声明了两个相同名称的成员,则在子类中重新声明的成员会覆盖从父类中继承过来的成员。

注意:只需要成员名称相同,就会发生覆盖。

注意:关于支持覆盖的成员,参考继承章节。

注意:覆盖并不会影响父类中原来的成员。

class A
  def f()
    1
  end
end

class B < A
  def f()
    2
  end
end

puts B.new().f()  # 2

5.2super()方法

super() 方法用于在子类中调用父类的同名成员。

支持的成员:类方法、实例访问器属性、实例方法、构造方法。

#传递所有实参
super

#不传递实参
super()

#传递所有或部分实参
super(实参)

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubylang/36160.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年3月2日 16:41
下一篇 2025年3月3日 16:43

相关推荐

  • 1.5Ruby语言的变量(Variable)

    1.变量声明 变量在赋值后可以通过重新赋值更改其值。 2.变量分类 名称 修饰符 全局变量 $ 局部变量 —————— 2.2成员变量 注意:Ruby 语言不支持在类体的顶级声明实例变量,如果有,则是类实例变量。 名称 修饰符 类变量 @@ 类实例变量 @ 实例变量 @ 3.变量引用表达式 4.并行赋值 并行赋值用于在…

    Ruby语言教程 2025年2月5日
    0490
  • 1.2Ruby语言的标识符(Identifier)

    1.标识符 标识符必须以字母(A~Z 和 a~z)或 下划线(_)开头,后续可以是字母(A~Z 和 a~z)、数字(0~9)或 下划线(_)。 注意:标识符区分大小写。 2.命名约定

    Ruby语言教程 2025年2月2日
    0370
  • 1.3Ruby语言的运算符(Operator)

    1.一元运算符 运算符 名称 描述 +a 求正 a 的值本身。 -a 求负 a 的负值。 2.算术运算符 运算符 名称 a + b 加法,字符串连接。 a – b 减法 a * b 乘法 a / b 除法 a % b 求余 a ** b 求幂 3.赋值运算符 运算符 名称 a = b 赋值 a +=…

    Ruby语言教程 2025年2月3日
    0600

发表回复

登录后才能评论