`

ruby类继承中的方法继承

    博客分类:
  • Ruby
阅读更多
c# 代码
  1. namespace ConsoleApplication1   
  2. {   
  3.     class Test   
  4.     {   
  5.         public static void Main()   
  6.         {   
  7.             B b = new B();   
  8.         }   
  9.     }   
  10.   
  11.     class A   
  12.     {   
  13.         public A()   
  14.         {   
  15.             Console.WriteLine("A");   
  16.         }   
  17.     }   
  18.   
  19.     class B : A   
  20.     {   
  21.         public B()   
  22.         {   
  23.             Console.WriteLine("B");   
  24.         }   
  25.     }   
  26. }  

这段程序的输出结果是
A
B

结果都不陌生,把这段程序用ruby重写

ruby 代码
  1. class A   
  2.   def initialize   
  3.     puts "A"  
  4.   end  
  5. end  
  6.   
  7. class B < A   
  8.   def initialize   
  9.     puts "B"  
  10.   end  
  11. end  

这段程序的输出是B,并非我想像中的
A
B

奇怪么?不奇怪,ruby的类在实例化的时候并不会去主动调用父类中的构造函数,也就是说,父类和子类的关系仅仅在于父类为子类提供一些可使用的方法而已,这些方法实际上放在父类自身的方法表或者父类单例类的方法表中:

ruby 代码
  1. class A   
  2. end  

在上面定义的这个类A的方法表中,没有保存任何方法,它所有的通过A.methods看到的方法,都是通过爬继承树得来的。当收到一个方法调用的消息时,ruby类首先会查找自己的方法表,若方法表中没有,就会沿着继承树向上爬,去祖宗类中去找,所以,当我们调用A.new的时候,就会沿着继承关系到Object,Kernel等里面去找这个new方法和initialize方法,在之前B继承A的例子中就可以看到,因为B本身的方法表中已经具有了initialize这个方法,new调用就不会去爬继承树找A中的initialize方法。

分享到:
评论

相关推荐

    用 Ruby 实现的脚本:可以提取 iOS 项目中的类继承关系

    这个Ruby脚本的目的是从iOS项目中提取出类的继承关系,并以JSON格式导出结果文件。利用这个脚本,我们可以便捷地分析一个iOS项目的类结构。 脚本的工作原理是遍历iOS项目中的所有Swift文件,通过解析语法树来找出类...

    Ruby 写的脚本,可以提取 iOS 项目中的类继承关系

    用 Ruby 写的脚本,可以提取 iOS 项目中的类继承关系。 用法: ruby class_hierarchy.rb path_to_iOS_project 抽取出的类关系会在 Ruby 脚本的当前执行目录下生成 Extracted 文件夹,里面是 JSON 格式的结果文件。...

    Ruby类继承、抽象类、类拓展混入、代理类实例

    当多个类公用很多方法的时候可以将公用方法部分抽取出来,需要的类做相关继承。 例子: 代码如下: class A ”it was a “ C.new.a #=&gt;”it was a “ 2、抽象类 当多个类要继承一个类时,用第一种方法,会遇到一个...

    实例讲解Ruby中的钩子方法及对方法调用添加钩子

    Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法。默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应。 class String def ...

    Ruby优化继承类实例

    主要介绍了Ruby优化继承类实例,本文直接给出一个优化实例及实现代码,需要的朋友可以参考下

    Ruby的教程.txt

    类与对象:理解Ruby中的类和对象的概念,学习如何定义类、创建对象以及使用对象的属性和方法。 继承与多态:掌握Ruby中的继承机制,了解子类如何继承父类的属性和方法,并实现自己的特定功能。同时,学习多态的...

    Ruby超级继承实验室v-000

    Ruby超级继承实验室目标定义两个类,其中一个继承自另一个。 在子类中定义使用super关键字从父类继承并扩充其方法的方法。指示在本实验中,您将编码一个Student类(将成为父类)和一个ChattyStudent类(将从student...

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    浅析Ruby中继承和消息的相关知识

    主要介绍了Ruby中继承和消息,是Ruby入门学习中的基础知识,需要的朋友可以参考下

    ruby学习资料大全,很全很丰富

    Ruby是"一种用于迅速和简便的面向对象编程的解释性脚本语言";这意味着什么?...类,继承,方法,等等 单态方法 模块糅合 迭代器和闭包(closures) 以及: 多精度整数 异常处理模式 动态装载 线程

    Ruby继承实验室v-000

    Ruby继承实验室目标定义从共享父类或父类继承的类。 定义那些类唯一的方法。概述在本实验中,我们将使用学校域模型。 我们的应用程序具有老师或学生的用户。 老师和学生将共享某些属性,并具有他们特有的某些行为。 ...

    Ruby动态编程对象编程Ruby动态编程对象编程Ruby动态编程对象编程

    Ruby是一门简洁、灵活而又优雅的...它支持类、继承、封装等面向对象的概念,并提供了丰富的类库和模块,方便开发人员进行面向对象的编程。 4. 生态系统:Ruby拥有活跃的开源社区和丰富的生态系统,提供了大量的库和

    Ruby的概要介绍与分析

    在Ruby社区中,松本也被称为马茨(Matz)。Ruby以其简洁优雅、动态性、面向对象和内置的丰富类库等特点而广受欢迎。 首先,Ruby的语法清晰易懂,采用了易于阅读的语法结构,使得代码可读性较高。这使得初学者能够更...

    非常好的Ruby中文版项目资源,分享出来.zip

    为了减少翻译过程中的错误,我保留了英文版本的内容。因此不要对本文档有任何的抱怨或不满,Fork并完善它才是更有意义的事情! 只要眼睛多,bug容易捉。——李纳斯法则 不要对错误和缺陷视而不见,任何建议或修正,...

    ruby语法基础教程

    §3.5 类变量与类方法 23 §3.4 存取控制 23 §3.6 元类 25 §3.7 Ruby的动态性 26 §3.8 变量 26 §3.8.1 局部变量 27 §3.8.2 实例变量 27 §3.8.3 类变量 27 §3.8.4 全局变量 28 §3.8.5 常量 28 §3.8 与定义...

    实例讲解Ruby使用设计模式中的装饰器模式的方法

    如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上。  通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的...

    Ruby 小白入门指南理解 Ruby 及其特点.txt

    安装完成后,你可以在命令行中输入 ruby -v 来检查 Ruby 是否成功安装以及安装的版本。 三、学习基础语法 变量和数据类型:Ruby 支持多种基本数据类型,包括整数、浮点数、字符串、数组、哈希等。你需要了解如何...

Global site tag (gtag.js) - Google Analytics