关于继承的一道题目

转载 2007年10月08日 21:48:00
在csdn的张孝祥专栏(http://blog.csdn.net/zhangxiaoxiang/archive/2006/08/15/1066757.aspx)上看到张老师出的一道题目,说是会让98%的Java程序员犯难的偏门问题!!
    当然,实际上哪有那么夸张,张老师也太低估搞java的了,而且这道题目怎么看我都好象在TIJ中看到过。。。但题目中还是有些细节值得学习学习地。。。

问题:

public class Parent 

    
public void test() 
    
{
    }

 
    
public Parent() 
    
{
        test();
    }

  
    
public static void main(String[] args) 
    
{
        
new Child();
    }

}

 
class Child extends Parent 
{
    
private int instanceValue = 20;
    
public void test() 
    
{
        System.out.println(
"instance value is: " + instanceValue);
    }

}



    各位先猜猜打印的结果是多少呢?为什么呢?
    在下面的回复中,我认为这种答案应该是正确的:
当实例化Child时(new Child()), 
会调用父类(Parent)的Constructor(构造函数). 
而在Parent的constructor中又调用的test()方法, 
此方法被子类Child Override了,所以那时会调用 
子类的test()方法,而调用的时候,子类的实例化 
还没有结束,其instance variable instanceValue还没有被赋值 
为20,而int 类型的默认值为0。 
因此打印的结果应该是0,而不是20。

    这题目确实不难,但有两点引起我的思考:
    (1)我在做这题目的时候,在new Child()时居然错误地认为,会先去调用Child类默认的构造函数,而实际上是:当创建派生类的对象时,系统将会调用基类的构造函数和派生类的构造函数,构造函数的执行次序是:先执行基类的构造函数,再执行派生类的构造函数。如果派生类又有对象成员,则,先执行基类的构造函数,再执行成员对象类的构造函数,最后执行派生类的构造函数。
    (2)instanceValue 这个变量是不会被赋值20的,但如果题目改为  private static int instanceValue = 20;那答案就应该是20了,因为在编译前就会赋20给这个变量。
 

java 继承编程题

1) 定义一个学生类,包括属性:学号(ID),姓名(name),成绩(score);构造方法(带三个参数);每个属性的访问器方法。 import java.util.Scanner; cl...
  • Care_about
  • Care_about
  • 2015年08月24日 22:47
  • 811

继承多态习题

4.4 精选习题 一、单项选择题 1.下列程序运行结果是(    )。 private class Base {     Base() {         int i = 100;    ...
  • WonderfulBin
  • WonderfulBin
  • 2017年04月13日 21:51
  • 2328

C#中的继承举例

源码: using System; namespace Inherit { public class Person { public string name; //...
  • u014581901
  • u014581901
  • 2016年04月04日 14:29
  • 431

C++实验题---填空(类与继承)

C++实验题---填空(类与继承) 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:302            测试通过:2...
  • suguoliang
  • suguoliang
  • 2017年05月16日 08:20
  • 228

java继承多态的练习题

java继承多态的练习题 2014-09-04 09:07优土壁 | 分类:JAVA相关 | 浏览403次 这两道题,完全没思路,求详解 ...
  • evilcry2012
  • evilcry2012
  • 2015年03月20日 17:47
  • 3690

C++精进篇(九)之―继承及经典示例

继承是C++的重要属性:         在C++中有:         公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 1. 公有继承(p...
  • fanyun_01
  • fanyun_01
  • 2016年03月26日 09:20
  • 6108

详解一道C++笔试题,考察重载、覆盖、多态

C++版看到的,说是面试宝典里的题目,考察重载、覆盖、多态等概念,比较有代表性。今天早上远程辅导 Yan Wang 同学学习 Qt 时还想到了这个题目,如果你能够正确理解这个题目,说明对于 C++ 中...
  • foruok
  • foruok
  • 2014年07月21日 08:28
  • 7421

【面试题】Java三大特性封装继承多态总结

本文内容总结于多篇博客,参考到的地方在文中都会一一列出 http://www.cnblogs.com/ibalintha/p/3897821.html 1.封装 封装...
  • zjkC050818
  • zjkC050818
  • 2017年10月18日 22:15
  • 457

继承与派生编程题1(C++程序设计第5周)

问题描述写一个MyString 类,使得下面程序的输出结果是: abcd-efgh-abcd- abcd- 3. abcd-efgh- efgh- c abcd- ijAl- ijAl-mnop qr...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2015年12月20日 22:24
  • 2688

模拟打僵尸(OC-继承题)

定义僵尸类: 公共成员变量:类型、总血量、每次失血量 方法:初始化方法(设置僵尸种类,总血量)、被打击失血、死亡 定义有防具僵尸类继承于僵尸类: 特有成员变量:防具...
  • Jiangyuyuan1993
  • Jiangyuyuan1993
  • 2014年09月16日 10:01
  • 373
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于继承的一道题目
举报原因:
原因补充:

(最多只允许输入30个字)