面向对象_3类.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象_3类

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 反射工具都开始于一个对象,该对象是关于一个类的动态(运行时)体现。 类对象是更一般的类(称为Class类)的实例。 类对象通常都包括类名称、类实例所占用内存的大小以及创建新实例的能力。 类对象 * * C++ typeinfo aClass = typeid(AVariable); Delphi Pascal aClass := aVariable.ClassType; Java Class aClass = aVariable.getClass(); Smalltalk aClass - aVariable class 获取类对象 * * Class parentClass = aClass.getSuperclass(); // Java parentClass - aClass superclass //Smalltalk 类对象操作-获取父类 * * char * name = typeinfo(aVariable).name(); // C++ String internalName=aClass.getName();//Java String descriptiveName=aClass.toString(); 类对象操作-字符串类名称 * * 如何决定多态变量是否真正包含一个指定子类的实例 Child *c-dynamic_castChild *(aParentPtr); if (c!=0){ … } //C++ if (aVariable instanceof Child) … if (aCalss.isInstance(aVariable)) … //Java 类对象操作-检测对象类 * * 对这种类型检测的不恰当使用是设计类结构不好的一个标志。 大多数情况下,都可以通过调用改写方法来代替显式检测 关于检测对象类 * * 如果下一步执行的行为要依赖于多态变量所包含的特定类型: Pet p=…; if(p instanceof Cat){ … } else if(p instanceof Dog){ … } else { System.err.println(“Unknown”)} 例 * * 建立一个新方法,子类特定行为移到子类中完成,缺省行为移到父类中完成。 这样做不仅代码数量减少,而且也减少了潜在的出错机会。 假如要增加一个新的子类,只需要保证这个类实现正确的接口即可。 Pet p= … ; P.newMethod(); 更好的解决方案 * * Object newValue = aClass.newInstance(); // Java 类对象操作-通过类建立实例 * * Class forName(string) Class getSuperClass() Constructor[] getConstructors() Field getField(string) Field[] getFields() Method[] getDeclaredMethods() boolean isArray() boolean isAssignableFrom(Class cls) boolean isInstance(Object obj) boolean isInterface() Object newInstance() Java中的类行为 * * Java和Smalltalk中,将方法看作是可以存取和操纵的对象。 例如Java中的一个方法是Method类的一个实例,定义了如下操作: String getName() Class getDeclaringClass() Int getModifiers() Class getReturntype() Class[] getParameterTypes() Object invoke(Object receiver,Object[]args) 作为对象的方法 * * Method [ ] methods = aClass.getDeclaredMethods(); System.out.println(methods[0].g

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档