- 1、本文档共47页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
class GraduateStudent extends Student { }? class Student extends Person { public String toString() { return Student; } }? class Person extends Object { public String toString() { return Person; } } 9.7 对象类型转换 语句 m(new Student()); 将对象 new Student() 传递给了 Object 类型参数. 该语句等价于: Object o = new Student(); // Implicit casting m(o); 隐式类型转换 为什要转换 假设: Student b = o; ? 因为Student对象的总是Object对象的实例,但是Object对象的实例不一定是Student对象的实例。 使用显示类型转换: Student b = (Student)o; // Explicit casting 错误? 父类和子类之间的转换 将一个子类的实例转换为一个父类的变量总是可行的,称为向上转换; 将一个父类的实例转换为一个子类的变量称为向下转换; 向下转换不一定总能成功。 ??? Cylinder myCylinder = (Cylinder)myCircle; Apple x = (Apple)fruit; Orange x = (Orange)fruit; instanceof 运算符 为确保转换的对象是子类的一个实例,使用instanceof 运算符: Circle myCircle = new Circle(); if (myCircle instanceof Cylinder) { Cylinder myCylinder = (Cylinder)myCircle; ... } Example 9.1演示多态和对象转换 创建2个对象,一个圆和一个圆柱,并调用displayObject方法显示它们。 TestPolymorphismCasting Run 9.9隐藏数据 可以覆盖一个实例方法,但是不能覆盖一个数据域(实例或静态的)或静态方法。 如果在子类中声明的数据域或静态方法与父类中的名字相同,父类中的将被隐藏,但是它依旧存在。 在子类中可以使用super关键字调用隐藏的数据域或静态方法。 protected 数据和方法 protected 修饰符可以应用于类中的数据和方法。 公用类中保护的数据或方法可以被它的子类或同一包中的任何类访问,即使子类在不同的包中也可以。 private, default, protected, public private, none (如果没有使用修饰符), protected, public 可见性逐渐增加 访问性汇总 Modifier on members in a class Accessed from the same class Accessed from the sam e package Accessed from a subclass Accessed from a different package public protected - default - - private - - - 可见性修饰符 注 一个子类可以覆盖父类的protected方法并把它的可见性改为public。 但是子类不能降低父类中定义的方法的可访问性。 final 修饰符 final 类不能被继承: final class Math { ... } final 变量是常量: final static double PI = 3.14159; final 方法不能被重写. finalize, clone, 和 getClass Methods finalize 方法会被该对象的垃圾回收程序调用. clone() 方法创建一个有单独内存空间的新对象,返回类型是object. int[] targetArray = (int [])sourceArray.clone() getClass() 描述类的信息,称为元对象。 Optional 初始化块 初始化模块是一个用大括号括住的语句块,它位于类的声明中,但是不在构造方法或方法内。 实例初始化块 public class Book { { nu
文档评论(0)