关于继承的一道题目

转载 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继承的一道经典面试题

package com.test; class Father{ int x = 1; public Father(){ System.out.println("father"); } public F...
  • sinat_29957455
  • sinat_29957455
  • 2016-10-03 10:50:29
  • 4754

一道关于点亮灯的数学题

题目大致是这样的:有100盏灯,第一轮操作:点亮全部的灯;第二轮操作,隔一盏灯熄灭一个;第三轮操作,每隔两盏灯,如果灯亮就熄灭他,否则点亮它。以此类推进行100轮操作,最后有多少灯点亮。 分析: ...
  • f81892461
  • f81892461
  • 2013-01-14 23:26:21
  • 483

栈——经典面试题(1)

  • 2015年10月17日 21:49
  • 7KB
  • 下载

面试时碰到的一道数据库题目

这几天面试了不少单位,做了些笔试题,做完回来都会回忆一下,做下整理。...
  • hzy38324
  • hzy38324
  • 2015-07-21 09:07:44
  • 1668

一道关于继承的题目

问:以下代码段最后输出的是什么 class Dog { public static void bark() { System.out.println("woof "); } } class...
  • dajiangqingzhou
  • dajiangqingzhou
  • 2017-09-26 16:50:25
  • 59

C++习题 继承与组合

Problem C: C++习题 继承与组合 [Submit][Status][Web Board] Description 已知类如下: (1) BirthDate(生日类) 含...
  • u013629228
  • u013629228
  • 2014-06-03 17:34:35
  • 1376

[C++笔试]类及继承的题目

问题: #include "stdio.h" class A { public: int _a; A() { _a = 1; } void print() { printf("%...
  • SMUEvian
  • SMUEvian
  • 2017-05-23 16:38:32
  • 411

java 笔试之继承基础(看看你能做对几道题)初学者不要小看啊

先笔试,全是基础题,共30道简笔题, 1. abstract class Name {  private String name;  public abstract boolean isStu...
  • a564663276
  • a564663276
  • 2013-05-20 21:40:29
  • 3178

Java继承、多态面试题

public class A { public int a = 0; public void fun(){ System.out.println("-----A...
  • qq_27258799
  • qq_27258799
  • 2016-04-19 22:14:14
  • 6226
收藏助手
不良信息举报
您举报文章:关于继承的一道题目
举报原因:
原因补充:

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