#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
# 面向对象
# => Ruby 是纯面向对象的语言, Ruby 中的一切都是以对象的形式出现.
# => Ruby 中的每个值都是一个对象, 即使是最原始的东西: 字符串、数字、甚至连 true 和 false 都是对象.
# => 类本身也是一个对象, 是 Class 类的一个实例.
# => 类用于指定对象的形式, 他结合了数据表示法和方法, 把数据整理成一个整齐的包.
# => 类中的数据和方法被称为类的成员.
# Ruby 类定义
# => 当定义一个类时, 实际是定义了一个数据类型的蓝图. 实际上并没有定义任何的数据, 而是定义了类的名称意味着什么.
# => 也就是说, 定义了类的对象将由什么组成, 以及在该对象上能执行什么操作.
# => 类定义以关键字 class 开始, 后跟 类名称, 最有以 end 表示定义完成.
#class Box # => 按照惯例, 名称必须以大写字母开头, 如果包含多个单词, 每个单词首字母大写.(CamelCase)
# ... some data
#end
# 定义 Ruby 对象
#box1 = Box.new
#box2 = Box.new
#puts box1, box2
# initialize 方法
#class Box
# => 构造函数
# def initialize(w, h)
# @width, @height = w, h
# end
# => 为了在类的外部读取类中已定义的变量, 我们可以通过定义访问器(getter)方法来访问.
# def width
# return @width
# end
# def height
# return @height
# end
# => Setter : 等号左边不能有空格。。。 坑爹
# def setWidth= (value)
# @width = value
# end
# def setHeight= (value)
# @height = value
# end
#end
#box1 = Box.new(12, 24)
#puts box1.width
#box1.setWidth = 20
#puts box1.width
#class Box
# 自动合成 getter setter 方法
# attr_accessor :width, :height
# 构造方法
# def initialize(w, h)
# @width = w, @height = h
# end
# 实例方法
# def getArea
# @width * @height
# end
#end
#box = Box.new(12, 20)
#box.width = 232
#puts box.width
# 类方法 & 类变量
# => 类变量是在类的所有实例中共享的变量. 类变量的实例可以被所有的对象实例访问.
# => 类变量以两个 @字符作为前缀. 类变量必须在类定义中初始化.
# => 类方法是以 def self.method() 定义, 以 end 完成定义.
#class Box
# @@var_class = 0
# def initialize(w, h)
# @width, @height = w, h
# end
# def self.method_class
# puts "class method-- #{@@var_class}"
# end
#end
#puts Box.method_class
# to_s 方法
# => 对象的字符串表示形式.
#class Box
# 构造器方法
# def initialize(w, h)
# @width, @height = w, h
# end
# 重定义 to_s 方法
# def to_s
# "w:#{@width}, h:#{@height}" # 对象的字符串格式
# end
#end
#box = Box.new(12, 23)
#puts box
# 访问控制
# => Ruby 提供了三个级别的实例方法保护, 分别是 public、private、protected.
# => Ruby 不在实例和类变量上应用任何访问控制.
# => Public 方法: Public 方法可被任意对象调用. 默认情况下, 方法都是 public 的, 除了 initialize 方法总是 private 的.
# => Private 方法: Private 方法不能从类外部访问或查看. 只有类方法可以访问私有成员.
# => Protected 方法只能被类及其子类的对象调用. 访问也只能在类及其子类内部进行.
#class Box
# 构造器方法
# def initialize(w, h)
# @width, @height = w, h
# end
# 实例方法默认是 public 的
# def getArea
# width() * height()
# end
# 定义 private 的访问器方法
# def width
# @width
# end
# def height
# @height
# end
# private :width, :height
# 定义受保护的
# protected :....
#end
#box = Box.new(12, 21)
#puts box.getArea
网友评论