文档章节

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

穿山
 穿山
发布于 2017/11/15 14:49
字数 591
阅读 6
收藏 0
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 = -






 

© 著作权归作者所有

穿山
粉丝 9
博文 33
码字总数 18655
作品 0
南京
私信 提问
Ruby 元编程:第一部分

元编程就是编写能为你编写代码的代码。但那不就是代码生成器所做的事情吗,就像是 rails gem,或者 yeoman?或者甚至是字节码编译器? 是的,但元编程一般指的是 Ruby 中的另外一些东西。rub...

oschina
2015/08/15
4K
38
以一个javaEE程序员的身份来学ruby

做为一个javaEE的程序员,在看关于ruby的资料的时候,难免会以一个对比的眼光来学习ruby,每看到一个和java不一样的地方,就会产生某些想法,先记录下来,待日后来验证。另外,都说Ruby在很多...

茶码古道
2012/07/02
136
0
【给初学者】Android学习路线

很多朋友都对学习路线问题感到迷茫,特别是还在上学的朋友们。在这里就详细的为大家介绍一下。 1.Java基础 很多朋友一上手就开始学习Android,似乎太着急了一些。Android应用程序开发是以Jav...

Jimmy Xie
2012/09/08
762
1
用比较的方式学习 ES6的class

距离上一次更新已经过去了半个多月的时间,由于最近的需求比较多,导致总结时间变得少了很多,所以文档更新速度明显变慢了许多。其实这些都是理由,时间挤挤总还是有的!在忙不也没耽误打上几...

你的声先生
08/22
0
0
Cocoa改造前篇 - 说在前面的

更好的阅读体验请点击 原文 从面相对象说起 (Object-Oriented Programming,简记为OOP)这个概念大家都有所耳闻,目前(2017.12),在Tiobe世界语言排行榜上排前十的语言中,C语言和Assembl...

秋刀生鱼片
2017/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
31分钟前
4
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
44分钟前
6
0
JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
55分钟前
6
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
今天
10
0
析构函数是否必须为虚函数?为何?

p517 在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易...

天王盖地虎626
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部