当前位置: 首页 > news >正文

Ruby中关于类以及继承的一些知识点

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

class Point
  VERSION = 2
  @@num = 12
  attr_accessor :x, :y
  def initialize(x, y)
    @x, @y = x, y
  end

  # 1 返回布尔值的方法末位一定要加上?
  # 2 此处的x 与 y 是self.x 的省略写法, 因为有get 方法所以才可以这么写
  # 当然也可以@x @y 这样的写法
  def first_quadrant?
    x > 0 && y > 0
  end

  # 3 但是在给局部变量赋值的时候一定不能简写成 x +=
  def plus(a, b)
    self.x += a
    @y += b
  end

  # 4 符号方法
  # 5 会自动将最后处理出来的结果return出去 此处省略return
  # 6 此处的x 和 y 就是省略了self.x 或者@x 这种写法
  def +(p2)
    Point.new(@x + p2.x, @y + p2.y)
  end

  # 7 此处x 前面不能加self 此处的self指的是类
  def self.second_quadrant?(x , y)
    x < 0 && y > 0
    # self指代的是类
    # print self.xxxx
  end

  # 8 类方法可以合并成多个写法
  class << self
    def foo2
    end
    def bar2
    end
  end

end

# 9 实例无法调用类方法
# 10 类也无法直接调用实例方法

class Point
  # 9 通过类直接调用全局变量 需要给类加一个方法
  # 10 在ruby中可以直接打开类增加你需要的东西
  def self.get_num
    @@num
  end
end

# 11 调用常量
# Point::VERSION

# 12 继承
class Point3D < Point
  # 13 super调用父类的同名方法
  def initialize(x, y, z)
    super(x, y)
    @z = z
  end
end

class Point2D < Point
  # 14 super如果不写参数的话 默认传入所有的参数给super
  def initialize(x, y)
    super
  end
end

# 15 在Ruby中子类可以继承父类的所有方法 不管是private protected public
# 在Ruby子类可以重写如 父类的private 方法但不建议这么做
# 继承最好使用protected 和 public 方法
class Point
  def prv_method
    print 'this is private method'
  end

  private :prv_method

  def pro_metod
    print 'this is protected method'
  end

  protected :pro_metod

  def wat
    prv_method
    pro_metod
  end

  def wut
    # 16 private 方法和 protected最大的区别 private方法不能使用实例调用
    # 只能隐式调用 所以self.prv_method 方法是错误的
    # self.prv_method
    self.pro_metod
  end
end

# 17 is_a? 和 instance_of 的区别
p3 = Point3D.new(1, 2, 3)

# 18 is_a? 只要是这个类的实例或者是子类的实例都可
p p3.is_a?(Point)
p p3.instance_of?(Point3D)

# 19 instance_of? 只能是这个类的实例才可以
p p3.instance_of?(Point)
p p3.instance_of?(Point3D)

# 20 = - p3等于上个计算式的结果
# p1 = Point(2, 3)
# p2 = Point(3, 4)
# p1 + p2
# p3 = -






 

转载于:https://my.oschina.net/u/3544267/blog/1573928

相关文章:

  • rsync通过服务同步、linux系统日志、screen工具
  • 隐马尔可夫模型(四)——隐马尔可夫模型的评估问题(后向算法)
  • mysql 创建日期列之timestamp
  • javascript中的数据类型、Object与Function
  • 华为交换机istack堆叠配置
  • iPhone/Mac Objective-C内存管理原理
  • 深入浅出WPF(8)——数据的绿色通道,Binding(中)
  • 基于Cisco技术的MPLS原理以及应用实现[一]
  • AIX系统学习之-CRS安装后校验
  • SSRS 2012 Report Items -- 表格类对象
  • oracle 查找OS进程id
  • linux--armv4l的安装
  • dwz(jui)刷新当前dialog的方法
  • Stucts应用引起的OutOfMemoryError
  • 跟我一起写 Makefile(一)
  • css的样式优先级
  • C学习-枚举(九)
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • HTML-表单
  • Map集合、散列表、红黑树介绍
  • MySQL用户中的%到底包不包括localhost?
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpiderData 2019年2月13日 DApp数据排行榜
  • SpiderData 2019年2月25日 DApp数据排行榜
  • vue 个人积累(使用工具,组件)
  • yii2权限控制rbac之rule详细讲解
  • 程序员最讨厌的9句话,你可有补充?
  • 代理模式
  • 官方解决所有 npm 全局安装权限问题
  • 再次简单明了总结flex布局,一看就懂...
  • ​学习一下,什么是预包装食品?​
  • #define
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (定时器/计数器)中断系统(详解与使用)
  • (分布式缓存)Redis哨兵
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (万字长文)Spring的核心知识尽揽其中
  • (一)基于IDEA的JAVA基础10
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)大型网站架构演变和知识体系
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net中wcf服务生成及调用
  • // an array of int
  • [.net]官方水晶报表的使用以演示下载
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [383] 赎金信 js