#!/usr/bin/ruby
# -*- coding: UTF-8 -*-
# 类的继承
# => 继承允许我们根据另一个类来定义一个类, 这样使得创建和维护应用程序变得更加容易.
# => 继承有助于重用代码和快速执行. 但 Ruby 不支持多继承, 但是 Ruby 支持 mixins. mixin 就像是多继承的一个特定实现, 在多继承中, 只有接口部分是可继承的.
# => 当创建类时, 我们可以直接指定新类继承自某个已有类的成员, 这样就不用从头编写新的数据成员和成员函数. 这个已有类被称为基类或父类, 新类被称为派生类或子类.
#定义父类
#class Box
# attr_accessor :width, :height
#
# # 构造器方法
# def initialize(w, h)
# @width, @height = w, h
# end
#
# # 实例方法
# def getArea
# @width * @height
# end
#end
##定义子类
#class BigBox < Box
# # 添加一个新的实例方法
# def printArea
# @area = @width * @height
# puts "Big Box Area Is : #{@area}"
# end
#end
#创建对象
#box = BigBox.new(12, 20)
#box.printArea
# 方法重载
# => 虽然我们可以在派生类中添加新的功能, 但有时我们可能想要改变已经在父类中定义的方法的行为.
# => 这时, 我们可以保持方法名不变, 重载这个方法的功能即可.
#class Box
# attr_accessor :width, :height
# def initialize(w, h)
# @width, @height = w, h
# end
#
#
# def getArea
# @width * @height
# end
#end
#class BigBox < Box
# # 重载
# def getArea
# @area = @width * @height
# puts "Big box area is : #{@area}"
# end
#end
#box = BigBox.new(10, 20)
#box.getArea
# 运算符重载
# => 我们希望使用 + 运算符执行两个 Box 对的向量加法, 使用 * 运算符来把 Box 的 width 和 height 相乘, 使得一元运算符 - 对 Box 的 width 和 height 对方.
# => 下面是一个带有数学运算符定义的 Box 类版本:
#class Box
# def initialize(w, h)
# @widht, @height = w, h
# end
#
# def +(other)
# Box.new(@width + other.width, @height + other.height)
# end
#
# def -@
# Box.new(-@widht, -@height)
# end
#
# def *(scalar)
# Box.new(@width * scalar, @height * scalar)
# end
#end
# 冻结对象
# => 有时候, 我们想要防止对象被改变. 在 Object 中, freeze 方法可实现这点, 他能有效地把一个对象变成一个常量. 任何对象都可以通过调用 Object.freeze 进行冻结.
# => 冻结对象不能被修改, 也就是说, 我们不能改变他的实例变量.
# => 我们可以使用 Object.frozen? 方法检查一个给定的对象是否已经被冻结. 如果对象已被冻结, 该方法将返回 true, 否则返回一个 false 值.
#class Box
# attr_accessor :width, :height
#
# def initialize(w, h)
# @width, @height = w, h
# end
#end
#box = Box.new(10, 20)
#box.freeze
#if ( box.frozen? )
# puts "Box object is frozen object"
#else
# puts "Box object is normal object"
#end
#box.width = 100
网友评论