`

构造方法&动态绑定一例

阅读更多
class Base{
int i;
Base(){
add(1);
}
void add(int v){
i = v;
}
void print(){
System.out.println(i);
}
}

class Extension extends Base{
Extension(){
add(2);
}
void add(int v){
i = v*2;
}
}

public class Qd073{
public static void main(String args[]){
bogo(new Extension());
}
static void bogo(Base b){
b.add(8);
b.print();
}
}

a)9
b)18
c)20
d)21
e)22

答案:e

解析:这道题综合考查了好几个知识点,如调用子类的构造方法时会先调用父类的构造方法;如果在子类的构造方法中没有显式调用父类的构造方法,那么创建子类的实例时会先调用父类的缺省构造方法;方法的动态绑定。
以上代码
创建的是Extension类的实例,所以在运行时,所有调用add()方法的过程,将始终和Extension类的add()方法动态绑定。以下是程序依次对变量i的改变过程。
初始值:i = 0;
step1:创建实例new Extension()
先调用父类的缺省构造方法Base(),父类的缺省构造方法中执行add(1),i=0 1*2 -> i=2,再调用子类的缺省构造方法Extension(),子类的缺省构造方法中执行add(2),i=2 2*2 -> i=6.
step2:执行add(8)
i=6 8*2 -> i=22[/size]
分享到:
评论

相关推荐

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    6.2.htm 如何使用构造函数为对象实例增加属性和方法 6.3.htm 在网页上显示中文形式的日期 6.4.htm 将一个小数四舍五入到指定位数 6.5.htm 以从大到小冒泡排序法为例 6.6....

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例059 通过定义方法求一个数的平方 95 实例060 使用重载方法实现不同类型数据的计算 97 实例061 使用属性存储用户编号和姓名 99 实例062 使用索引器 101 实例063 通过类继承计算梯形面积 103 实例064 封装类实现一...

    二十三种设计模式【PDF版】

    将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合) 设计模式之 Flyweight(共享元) 提供 Java运行性能,降低小而大量重复的类的开销. C. 行为模式 设计模式之 Command(命令) ...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    asp.net知识库

    动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和...

    C++MFC教程

    可以通过以下的方法构造: CRect( int l, int t, int r, int b ); 指明四个坐标 CRect( const RECT& srcRect ); 由RECT结构构造 CRect( LPCRECT lpSrcRect ); 由RECT结构构造 CRect( POINT point, SIZE size ); 有...

    hibernate 框架详解

    实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和hashCode...

    hibernate3.04中文文档.chm

    5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和...

    Hibernate教程

    5.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 5.1.3. 提供一个标识属性(identifier property)(可选) 5.1.4. 使用非final的类 (可选) 5.2. 实现继承(Inheritance) 5.3. 实现equals()和...

    最全Hibernate 参考文档

    4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 使用非final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和...

    Hibernate3+中文参考文档

    4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可选) 4.1.4. 使用非final的类 (可选) 4.2. 实现继承(Inheritance) 4.3. 实现equals()和...

    J2EE中文版指南 CHM格式 带全文检索

    将属性与会话绑定 169 与会话相关联的通知对象 170 会话管理 170 会话跟踪 170 结束servlet 171 跟踪服务请求 171 通知方法Shut Down 172 创建长时间运行的方法 173 第11章 JSP技术 175 什么是JSP页面 175 JSP页面的...

    在C++程序中使用QML

    访问一个绑定的属性,没有NOTIFY信号的话,将导致QML在运行时发出警告信息。 动态结构化数据 如果应用程序对结构化过于动态编译QObject类型;那么对动态结构化数据可在运行时使用QDeclarativePropertyMap 类构造。 ...

    幻影Webzine.1.7z

    格的是将Cookie和Remote-addr相绑定(其实就是和IP绑定,但是一些程序取得IP的方法有问 题一样导致饶过),但是这样就带来很差的用户体验,更换Ip是经常的事,譬如上班与家里就 是2个IP,所以这种方法往往也不给予...

    hibernate 体系结构与配置 参考文档(html)

    实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的标志...

    Hibernate 中文 html 帮助文档

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

    Hibernate中文详细学习文档

    4.1.1. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.2. 提供一个标识属性(identifier property)(可选) 4.1.3. 使用非final的类 (可选) 4.1.4. 为持久化字段声明访问器(accessors)和是否可变的...

Global site tag (gtag.js) - Google Analytics