AvA 继3Q2 辽宁经济职业技术学院信息系 硕士、副教授陈英 JAVA
继 承(2) 辽宁经济职业技术学院信息系 硕士、副教授 陈英
AvA 动绑定 调用一个对象方法的机制 1)编译器检查对象声明类型和方法名。 2)编译器检查方法调用中的参数类型。 3)如果方法类型为 private, static、fina或 者是一个构造器,那么编译器也会准确地知 道该调用哪个方法,这称之为静态绑 与此相反,靠隐式参数的实际类型来决定调 用哪个方法称之为动态绑定,这必须发生在 运行时。 5)当程序运行并且使用动态绑定来调用一个方 法时,那么虚拟机必须调用同个特定的类 JAVA 指向的对象的实际类型相匹配的方法版本
动态绑定 调用一个对象方法的机制: 1) 编译器检查对象声明类型和方法名。 2) 编译器检查方法调用中的参数类型。 3) 如果方法类型为private、static、final或 者是一个构造器,那么编译器也会准确地知 道该调用哪个方法,这称之为静态绑定。 4) 与此相反,靠隐式参数的实际类型来决定调 用哪个方法称之为动态绑定,这必须发生在 运行时。 5) 当程序运行并且使用动态绑定来调用一个方 法时,那么虚拟机必须调用同个特定的类所 指向的对象的实际类型相匹配的方法版本
AvA 方法的型构 一个方法的名字和参数类型列表称作该 方法的型构。 o例如,fin和 String)是两个具有相 同名字但不同型构的方法。 ○如果在子类中定义一个同超类中某个方 法的型构完全相同的方法,那么你就重 载了超类中的那个方法。 JAVA
方法的型构 一个方法的名字和参数类型列表称作该 方法的型构。 例如,f(int)和f(String)是两个具有相 同名字但不同型构的方法。 如果在子类中定义一个同超类中某个方 法的型构完全相同的方法,那么你就重 载了超类中的那个方法
AvA 动绑定 在运行时,调用 e.getsalary0的过程是 1)虚拟机提取e的实际类型的方法表。这可能 是 Employee、 Manager或者是 Employee 超类的方法表。 2)虚拟机在表中查找 getsalaryo型构。现在 它知道该调用哪个方法了。 3)虚拟机调用那个方法。 ◎动态绑定的重要特性:它能使程序变得可扩展 而无需重编译已存在的代码。 若重载一个方法,子类方法必须至少具有超类 方法的可见性。特别是,如果超类方法为 waP public,那么子类方法必须也定义为pubi
动态绑定 在运行时,调用e.getSalary()的过程是: 1) 虚拟机提取e的实际类型的方法表。这可能 是Employee、Manager或者是Employee 超类的方法表。 2) 虚拟机在表中查找getSalary()型构。现在 它知道该调用哪个方法了。 3) 虚拟机调用那个方法。 动态绑定的重要特性:它能使程序变得可扩展 而无需重编译已存在的代码。 若重载一个方法,子类方法必须至少具有超类 方法的可见性。特别是,如果超类方法为 public,那么子类方法必须也定义为public
多防止健承fnal.和方 当不希望别人从你的类上派生新类时,可以使用mnl 修饰符定义在该类上,那么该类就是不可扩展的。 也可以把类中的一个方法声明为ma,它表示子类将不 能重载该方法。 °把一个方法或一个类设为fn有两个原因: 1)效率。动态绑定比静态绑定开销要大,所以进行动 态绑定的程序会更慢。 安全。动态分配机制的灵活性意味着你不能完全控 制调用一个方法时所发生的一切。 例如 e.getNameo:e是一个子类的对象,把方法 设为fnal,则编译器可以把其替换成 e halme。^象 JAVA
防止继承—— final类和方法 当不希望别人从你的类上派生新类时,可以使用final 修饰符定义在该类上,那么该类就是不可扩展的。 也可以把类中的一个方法声明为final,它表示子类将不 能重载该方法。 把一个方法或一个类设为final有两个原因: 1) 效率。动态绑定比静态绑定开销要大,所以进行动 态绑定的程序会更慢。 2) 安全。动态分配机制的灵活性意味着你不能完全控 制调用一个方法时所发生的一切。 例如e.getName():e是一个子类的对象,把方法 设为final,则编译器可以把其替换成e.name