Ruby学习之路-类,对象,变量

1、先来看一个类:
class Fruit
 #构造方法
 def initialize(name, weight)
  @name = name;
  @weight = weight;
 end
 
 #打印MyWife信息
 def printInfo
  print("name:", @name, " weight:", @weight);
 end
end

fruit = Fruit.new("Apple", 2);
fruit.printInfo();

  可以看出上类的定义中,其方式与其他高级语言类似,都是在类的定义中增加对方法和变量的定义。都有一个特殊的方法来支持定义对象时的初始化,Ruby为initialize,与其他语言所不同的是定界符及定义方法的关键字和变量类申明。
  使用 @将bia

2、类的继承:
咱们再来定义一个类:
class Apple < Fruit
 def initialize(name, weight, color)
  super(name, weight);
  @color = color;
 end
end

fruit = Apple.new("Apple", 2, "Red");
fruit.printInfo();

Ruby类继承关键字使用“<”,其含义与java“extends”一致,对父类构造方法的使用及重载父类方法的方式也一致。

3、属性的读取
  A、为每个属性写一个方法,类似于Java的getXXX()方法
  B、快捷定义读取属性的方法 attr_reader :name, :color将会属性name定义读取方法,与这面代码等效:
def name
   @name
end

def color
  @color
end

4、属性的赋值:
  ruby中使用定义对象赋值方法的方式进行赋值,如:
def duration= (new_duration)(new_duration)
  @duration = new_duration
end
其中duration后必须尽更着=号,否则会报语法错误。与读取属性值类似,Ruby提供了快捷的定义属性赋值的方法:
attr_writer :duration

5、类变量和类方法:
A、类变量(以@@开始的变量)含义与java的类静态变量一致,属于被类的所有对象共享的对象。它必须在使用前初始化,且它是私有的。
B、类方法(def ClassName.MethodName)含义与java静态方法一直,不需要定义对象即可使用。
可参见如下程序:
class DealClassV
 @@MAX_NUM = 100;
 
 def DealClassV.isTooLarge(number)
  if(number > @@MAX_NUM)
   print(number, " is larger than ", @@MAX_NUM, "/n");
  else
   print(number, " is smaller than ", @@MAX_NUM, "/n");
  end
 end
 
 def add(nubmer)
  @@MAX_NUM += nubmer;
  print("Now MAX_NUM is: ", @@MAX_NUM, "/n");
 end
end

DealClassV.isTooLarge(2);
DealClassV.isTooLarge(122);

obj = DealClassV.new();
obj.add(100);

obj = DealClassV.new();
obj.add(200);

提供一个单例模式的实现,使用类变量
class MyLogger
 private_class_method :new
 
 @@logger = nil;
 
 def MyLogger.create
  @@logger = new unless @@logger
  @@logger
 end
end
#(Programming Ruby - 2nd)

看一个比较有意思的例子:
先定义一个Shape类,传入边 的数目和周长
class Shape
  def initialize(num_sides, perimeter)
    # ...
  end
end
后需要改变定义方式,支持三角形和正方形:
class Shape
  def Shape.triangle(side_length)
    Shape.new(3, side_length*3)
  end
  def Shape.square(side_length)
    Shape.new(4, side_length*4)
  end
end
#(Programming Ruby - 2nd)
它是在原来的基础上增加了两个类方法实现的

6、权限
protected、private、public(默认)

7、Variables
可通过dup复制对象,生成新对象,类似于Java的clone:
var1 = "var";
var2 = var1.dup:   #复制var1引用指向的对象值,生成新对象,var2引用指向新对象
可通过var1.freeze;冻结对象,类似于java的final

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值