`
李灵晖-raylee
  • 浏览: 138543 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-12.1 为什么需要RTTI(Run-Time Type Identification)?

 
阅读更多

这一章节我们来讨论一下为什么需要RTTI(Run-Time Type Identification)。

答案:RTTI维护类型的信息,为多态机制的实现提供基础。

1.怎么为多态的实现提供基础?

多态,主要就是通过向上转型,然后通过泛化来父类引用子类对象。

例如:

package com.ray.ch12;

public class Test {
	public static void main(String[] args) {
		Person man = new Man();
		man.say();
	}
}

class Person {
	public void say() {
		System.out.println("i am a person");
	}
}

class Man extends Person {
	@Override
	public void say() {
		System.out.println("i am a man");
	}
}

输出:

i am a man

通过继承,我们Man覆盖say方法,但是我们在new的时候写的类型是Person,通过RTTI它知道了需要调用Man的say方法,所以才有上面的输出。


我们举例来说明上面的描述:

package com.ray.ch12;

public class Test {
	public static void main(String[] args) {
		Person person = new Person();
		System.out.println(person.getClass().getName());
		Person man = new Man();
		System.out.println(man.getClass().getName());
	}
}

class Person {
}

class Man extends Person {
}

输出:

com.ray.ch12.Person
com.ray.ch12.Man

我们通过getClass的getName方法,得到这个变量具体指向哪个类new出来的对象,虽然大家new的时候都是创建Person类型的对象,但是通过输出看见,其实上面两个变量是指向不同类生成的对象的,因此,对于第一段代码里面为什么能够输出“i am a man”,就是因为通过RTTI编译器知道调用哪个对象的方法。


2.RTTI提供一些什么信息?

关于这一点我们可以查看api里面Class这一个类的一些方法,它里面有详细描述。

我们下面将举一个比较常用的方法:forName

我们下面在同一个包里面建立两个类:

Bird:

package com.ray.ch12;

public class Bird {
}

Test:

package com.ray.ch12;

public class Test {
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		try {
			Class<Bird> birdClass = (Class<Bird>) Class.forName("com.ray.ch12.Bird");
			Bird bird = (Bird) birdClass.newInstance();
			System.out.println(bird.getClass().getName());
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
输出:

com.ray.ch12.Bird


RTTI还给我提供了丰富的类型信息,在运行当中我们可以适当的运用。


总结:这一章章节介绍了为什么需要RTTI,以及介绍了我们比较常用的forName方法。


这一章节就到这里,谢谢。

-----------------------------------

目录




分享到:
评论

相关推荐

    RTTI.rar_RTTI info_Run Time_rtti

    RTTI,全称为Run-Time Type Information,是C++语言中的一种特性,允许程序在运行时获取对象的实际类型信息。这在多态编程中尤其有用,因为它使得动态绑定和类型检查成为可能,增强了代码的灵活性和安全性。下面我们...

    rtti.rar_Run Time

    运行时类型识别(RTTI,Run-Time Type Identification)是C++编程语言中的一项特性,它允许程序员在程序运行过程中查询对象的实际类型信息。这在处理多态性、动态类型检查和设计模式中扮演着重要角色。RTTI通常与虚...

    Delphi-的RTTI机制浅探.doc

    RTTI(Run-Time Type Information)是 Delphi 中的一种机制,可以在运行期获得数据类型或类的信息。本文将对 Delphi 的 RTTI 机制进行浅探,介绍 RTTI 的基本概念、类和 VMT 的关系、类、类的类、类变量的关系、T...

    RTTI.zip_DELPHI RTTI_delphi_rtti

    Delphi的运行时类型信息(Runtime Type Information,简称RTTI)是其强大的特性之一,它允许程序员在程序运行时获取对象或类的类型信息。在Delphi中,RTTI可以帮助我们进行动态类型检查、反射操作以及自动生成代码等...

    A General-Purpose Run-Time Type Information System for C++

    ### 通用运行时类型信息系统(C++ RTTI)解析 #### 概述 《通用运行时类型信息系统(C++ RTTI)》一书是Alexandru Telea所著,主要探讨了C++语言中的运行时类型信息(RTTI)机制。由于C++是一种静态类型语言,在编译时就...

    rtti-inspector-combo.zip_DELPHI RTTI_RTTIInspector_inspector

    在Delphi编程环境中,RTTI(Run-Time Type Information)是一种强大的特性,允许程序在运行时获取类型信息。这个“rtti-inspector-combo.zip”压缩包包含了一个利用Delphi RTTI机制创建的“RTTIInspector”工具,它...

    c++ typeid关键字的使用

    它是C++ RTTI(Run-Time Type Identification)系统的一部分,允许程序员在运行时检查对象的真实类型,即使对象通过基类指针或引用访问。与`sizeof`操作符相似,`typeid`也是一个操作符而不是函数。 `typeid`的基本...

    强类型系统 RTTI 类型识别

    强类型系统 RTTI(Run-Time Type Identification)是一种类型识别系统,主要用于在运行时期检查对象的实际派生类型。RTTI 提供了两个非常有用的操作符:typeid 操作符和 dynamic_cast 操作符。typeid 操作符返回指针...

    Delphi的RTTI机制文档

    RTTI,全称Runtime Type Information(运行时类型信息),是编程语言中的一种特性,允许程序在运行时获取对象的类型信息。在Delphi中,RTTI是一个强大的工具,它使得开发者能够在运行时检查、操作类的属性、方法和...

    DELPHI RTTI 探索

    RTTI(Run-Time Type Information),即运行时类型信息,是一种使程序能够在运行期间获取到数据类型或者类的信息的技术。这在许多面向对象编程语言中非常常见,而在Delphi中也不例外。RTTI的主要作用在于能够动态地...

    失物招领平台源码java-cpp-to-java-source-converter:将C++转换为Java的翻译器。正在进行中的工作

    失物招领平台源码java C++ 到 Java 的翻译器 该项目旨在将 C++ 代码转换为高级 Java 源代码。 在不可能的情况下,TODO 应该出现在生成的源代码中。 地位 该项目大约进行了四分之三的初始发布。 以下项目将不会被初始...

    Java 基础(7-8) - 反射机制详解.pdf

    RTTI(Run-Time Type Identification)机制是 Java 反射机制的一部分。它允许我们在运⾏时发现和使⽤类的信息。RTTI 机制有两种形式,一种是“传统的”RTTI,它假定我们在编译时已经知道了所有的类型;另一种是...

    识别c++ RTTI的ida脚本1

    在Windows x86平台下,当RTTI启用时,类的虚表中-4的位置会有一个名为RTTI complete object locator的结构体,这个结构体指向RTTI type descriptor,后者存储了类的原始名称。 `type_info`类是C++标准库中用于表示...

    深入理解Java的反射机制Java系列2021.pdf

    RTTI是Run-time Type Identification的缩写,即运行时类型识别。Java语言通过RTTI可以在运行时知道一个对象的类型信息。RTTI在Java中主要通过两种形式存在:一种是传统的类型转换,也就是instanceof关键字和类的...

    RTTI.rar_rtti

    在C++编程中,RTTI(Run-Time Type Information,运行时类型信息)是一个强大的特性,它允许程序在运行时检查对象的实际类型。RTTI是C++标准库的一部分,提供了获取对象动态类型信息的能力,这对于多态性和面向对象...

    MFC RTTI代码(博客中使用资源)

    在C++编程中,RTTI(Run-Time Type Information,运行时类型信息)是一种特性,它允许程序员在程序运行时查询对象的实际类型。MFC(Microsoft Foundation Classes)是微软提供的一个C++类库,用于构建Windows应用...

    c++ RTTI解析

    C++ 的运行时类型识别 (Run-Time Type Information, RTTI) 是一种强大的特性,允许程序在运行时获取对象的类型信息,这对于支持诸如多态性等功能至关重要。本文将深入探讨 C++ 中的 RTTI 机制,特别是 `dynamic_cast...

    RTTI.rar_ RTTI_rtti

    运行时类型识别(Runtime Type Information,简称RTTI)是C++语言中的一种特性,它允许在程序运行期间获取对象的实际类型信息。RTTI是C++为面向对象编程提供的一项强大工具,尤其在多态性编程中,能够帮助我们实现更...

    RTTI内存模型布局研究

    在C++编程语言中,Run-Time Type Information(RTTI)是一项关键特性,它允许程序员在程序运行时查询对象的确切类型。RTTI是C++多态性的重要组成部分,特别是对于动态类型检查和类型转换非常有用。本文将深入探讨...

    C++test FOR TEST RTTI

    在C++编程语言中,RTTI(Run-Time Type Information,运行时类型信息)是一个强大的特性,它允许程序在运行期间检查对象的实际类型。C++test FOR TEST RTTI 是一个可能的测试工具或教程,旨在帮助开发者理解和运用...

Global site tag (gtag.js) - Google Analytics