`
googya
  • 浏览: 143385 次
  • 性别: Icon_minigender_1
  • 来自: 汉川
社区版块
存档分类
最新评论

Java的内部类与Ruby的内部类的区别

阅读更多
  今天经过night-stalker的提醒,突然意识到Ruby的内部类和Java的内部类存在不少区别。其中我发现最大的区别是:
    在Java中,内部类方法可以访问其自身的数据字段,也能够访问创建它的外部类的数据字段。在Java中内部类对象要有一个银隐含引用,指向创建它的对象。
    而在Ruby中,恰好相反。外部类的方法可以访问内部类的字段,但是反过来却不行。
    若单独的使用,只要熟悉相应的语法规则,不会出现问题。但是要在JRuby中的时候,就有可能出现问题,因为有2中截然不同的方式实现内部类,这时可能会出现乱子!
   


module MyPackage
	module InnerPacage
		class TheWorker
			def initialize(foo)
				@foo=WorkHelper.new(foo)
			end

			def foo
				@foo.caclulate
			end
			class WorkHelper
				def initialize(value)
					@value=value
				end
				def caclulate
					@value**2
				end
			end
		end
	end
end
puts MyPackage::InnerPacage::TheWorker.new(10).foo
		


class ButtonPanel extends JPanel{

	public Button(){
		JButton yellowbutton=new JButton("yellow");
		add(yellowbutton);
		ColorAction yellowAction new ColorAction(Color.YELLOW);
		yellowbutton.addActionListener(yellowAction);
	}

	private class ColorAction implements ActionListener
	{
		public ColorAction(Color c){
			backcolor=c;
		}

		public void actionPerformed(Action event){
			setBackground(backcolor);
		}

		private Color backcolor;
	}
}
 
分享到:
评论

相关推荐

    From Java to Ruby

    Ruby的块和闭包是其独特之处,它们提供了强大的控制流和数据处理能力,这是Java中匿名内部类和接口不能比拟的。 其次,Ruby的语法简洁明了,例如,方法调用可以省略括号,变量声明不需要特定关键字,这使得代码看...

    ruby初学者教程(对初学者很有帮助)

    **3.5 类变量与类方法** 类变量是以`@@`开头的变量,可以在类的所有实例之间共享。类方法则是定义在类本身上的方法。 ```ruby class MyClass @@counter = 0 def self.increment_counter @@counter += 1 @@...

    Working with Ruby Threads

    - **MRI内部机制**:MRI(Matz's Ruby Interpreter)是Ruby的标准实现,它通过GIL保证了内存安全性和数据一致性。 - **特殊情况:阻塞I/O操作**:当线程执行阻塞I/O操作时,GIL会被释放,允许其他线程执行。 #### ...

    Metaprogramming.Ruby

    - **Sebastian Hennebrüder**(Java顾问和培训师)提到,在阅读本书后尝试了Java和JRuby的元编程技术,并将其比作在剑战中手持香蕉与持有一米长武士刀的区别,暗示使用Ruby元编程后的强大感。 - **Jurek Husakowski...

    ruby 中文 教程 从入门到精通

    - **类与对象**:Ruby中的一切都是对象,类是对象的模板,可以定义属性和方法。通过继承和多态机制,可以构建复杂的程序结构。 #### 五、面向对象编程在Ruby中的应用 - **对象**:在Ruby中,每个实体都是对象,即使...

    beyond java

    5. **闭包和块**:Ruby的块和闭包是强大的功能,允许在函数内部定义局部作用域的代码块,可作为参数传递,这在Java 8之后才引入类似的概念(Lambda表达式)。 6. **并发模型**:Java使用线程进行并发处理,而Ruby...

    ruby语言基础教程.pptx(共17页,携程内部培训版)

    - **NetBeans**: 除了支持Java之外,NetBeans也支持Ruby开发。 3. **Ruby的第一个程序** - 通常第一个Ruby程序是输出“Hello, World!”,用于验证Ruby环境是否配置正确。 4. **数字** - **内建类**: Ruby中内置...

    Ruby-Logging一个用在Ruby程序中灵活日志库

    Ruby-Logging库是一个在Ruby编程语言中广泛使用的日志处理工具,它借鉴了Java的log4j库的设计理念,提供了一种灵活、可扩展的方式来记录应用程序的运行信息。这个库的核心目标是帮助开发者轻松地控制日志输出的级别...

    疯狂JAVA讲义

    学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类? 211 6.7.4 局部内部类 211 6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 ...

    ruby on rails 101

    ### Ruby on Rails 101:深入理解与实践 #### 引言 《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天...

    Working with Ruby Threads(完整版)

    通过阅读"Working With Ruby Threads"这本书,你可以深入了解Ruby线程的内部工作原理,学习如何编写高效、安全的多线程Ruby程序。这本书不仅涵盖了理论知识,还提供了许多实用示例和最佳实践,对任何希望提升Ruby...

    Java 版的 Ruby 解释器 JRuby 1.7.14 发布

    JRuby 1.7.14 版本主要致力于与 Ruby 1.9.3 的兼容性,确保在 Java 上运行 Ruby 代码时能够保持与原生 Ruby 环境相似的行为。在这个版本中,开发者修复了大量问题,包括性能优化、内存管理、兼容性修复以及对特定...

    Ruby、Python不能威胁Java的13个理由

    标题中的“Ruby、Python不能威胁Java的13个理由”表明了作者认为尽管这两种脚本语言在某些领域受到关注,但它们无法撼动Java在编程领域的主导地位。描述提到,作者通过数据分析反驳了Java将被替代的观点,并提出了...

    08Ruby 模块.docx

    #### 四、模块与类的区别 尽管模块和类在语法上非常相似,但它们之间存在一些关键区别: 1. **模块不可实例化**:不能像创建类实例那样创建模块实例。 2. **模块无子类**:模块不支持继承,即不能定义为其他模块的...

    Ruby语言入门教程

    - **命令式语言**:如FORTRAN、Pascal、C++、Java等,这类语言关注于指令的顺序执行,通过命令式的步骤来实现算法。 - **第四代语言** 第四代编程语言的特点是声明式编程,即用户只需要描述“做什么”,而不是...

    Ruby语言教程.docx

    - **目的**:保护对象的内部状态不被外部直接访问,仅通过公共接口与外界交互。 **多态**: - **定义**:指不同对象对同一消息作出响应的能力。 - **实现方式**:通过方法重写实现。 #### 四、常用库与框架 **...

    ruby 帮助文档资料

    标签“源码”可能暗示着这篇博客会深入到Ruby的源码层面,讨论其内部机制,如垃圾回收、解析器的工作原理或是类和对象的实现。对于想要深入了解Ruby的开发者来说,这部分内容非常有价值。 总的来说,Ruby语言以其...

    ruby 类常量 解析

    这一点与某些其他编程语言不同,比如Java或C++,在那里重新定义常量会导致编译错误。 在Ruby的交互式解释器(irb)中,我们可以看到如下示例: ```ruby ruby> fluid = 30 # 输出:30 ruby> fluid = 31 # 输出:31 ...

Global site tag (gtag.js) - Google Analytics