文档详情

ch4Java面向对象特性.ppt

发布:2017-05-31约1.26万字共91页下载文档
文本预览下载声明
方法的参量和异类集合 1. 方法的参量 实际中,实例和变量并不总是属于同一类。 例 public TaxRate findTaxRate(Employee e) { // 进行计算并返回e的税率 } // 而在应用程序类中可以写下面的语句 Manager m = new Manager(); …… TaxRate t = findTaxRate(m); 这是合法的,因为Manager是一个Employee。 2. 异类集合 异类集合是由不同质内容组成的集合。 在面向对象的语言中,可以创建有公共祖先类的任何元素的集合。 instanceof运算符 由于类的多态性,类的变量既可以指向本类实例,又可以指向其子类的实例。 可以通过instanceof运算符来判明一个引用到底指向哪个实例 。 instanceof运算符 假定继承关系如下所示: public class Employee extends Object public class Manager extends Employee public class Contractor extends Employee instanceof运算符 则类之间的层次关系如下图所示: Object Employee Manager Contractor 示例 public void method(Employee e) { if (e instanceof Manager) { // 经理级人士 } else if (e instanceof Contractor) { // 掌握公司机密的高层人士 } else { // 普通雇员 }} 转换对象 Java允许使用对象之父类类型的一个变量指示该对象。 下面的语句是合法的: Employee e = new Manager(); 使用变量e,可以只访问Employee对象的内容,而隐藏Manager对象中的特殊内容。 转换对象 对象引用的赋值兼容原则允许把子类的实例赋给父类的引用,但不能把父类的实例赋给子类的引用。 如果用instanceof运算符已判明父类的引用指向的是子类实例,就可以转换该引用,恢复对象的全部功能。 示例 public void method(Employee e) { if (e instanceof Manager) { Manager m = (Manager)e; System.out.println(This is the manager of +m.department); } // 其他操作 } 转换对象 一般地,要替换对象引用时需做下列检查: (1) 沿类层次向“上”转换总是合法的。实际上此种方式下不需要转换运算符,只用简单的赋值语句就可完成。 (2) 对于向“下”替换,只能是父类到子类转换,其他类之间是不允许的。 (3) 编译器检查正确后,需在运算时检查引用类型 覆盖方法 使用类的继承关系,可以从已有的类产生一个新类,修改父类中已有的方法。 如果子类中定义方法所用的名字、返回类型和参数表和父类中方法使用的完全一样,称子类方法覆盖了父类中的方法,即子类中的成员方法将隐藏父类中的同名方法。 覆盖方法 利用方法隐藏,可以重定义父类中的方法。 覆盖的同名方法中,子类方法不能比父类方法的访问权限更严格。 在子类中,若要使用父类中被隐藏的方法,可以使用super关键字。 示例 class Point { void print() { System.out.println(This is the superclass!); } public static void main(String args[]){ Point superp = new Point (); superp.print(); Point3d subp = new Point3d(); subp.print(); }} class Point3d extends Point { void print() { System.out.println(This is the subclass!);}} 示例 class Point1 { void print() { System.out.println(This is the superclass!); } public static void main(String args[]){ Point1 superp = new Point1 (); superp.print(); Point3d subp = new Point3d(); subp.print();}} class
显示全部
相似文档