A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bushangkoukou 中级黑马   /  2013-6-4 15:39  /  2438 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 bushangkoukou 于 2013-6-4 19:41 编辑

class Fu
{
Fu()
{
  System.out.println("fu run");
}
Fu(int x)
{
  System.out.println("fu...****..."+x);
}
}
class Zi extends Fu
{
Zi()
{
//super();
  System.out.println("zi run");
}
Zi(int x)
{
//super();
  System.out.println("zi..."+x);
}
}
class  ExtendsDemo4
{
public static void main(String[] args)
{
  Zi z = new Zi();
  Zi z1= new Zi(4);
}
}

此代码中为什么父类中的Fu (int x)不执行????

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

8 个回复

倒序浏览

  1. //此代码中为什么父类中的Fu (int x)不执行????
  2. class Fu
  3. {
  4.         Fu()
  5.         {
  6.                 System.out.println("fu run");
  7.         }
  8.         Fu(int x)
  9.         {
  10.                   System.out.println("fu...****..."+x);
  11.         }
  12. }
  13. class Zi extends Fu
  14. {
  15.         Zi()
  16.         {
  17.                 //super();
  18.                   System.out.println("zi run");
  19.         }
  20.         Zi(int x)
  21.         {
  22.                 /*
  23.                 第二部:
  24.                 所以,为了满足你的题意,你需要手动写super(参数),去主动运行父类中有参数的构造函数
  25.                 把下面这句话改啦!
  26.                 */
  27.                  super(x);//super();
  28.                   System.out.println("zi..."+x);
  29.         }
  30. }
  31. class  ExtendsDemo4
  32. {
  33.         public static void main(String[] args)
  34.         {
  35.           Zi z = new Zi();
  36.           Zi z1= new Zi(4);
  37.           /*
  38.           第一部:
  39.                 Zi z1=new Zi(4);
  40.                 对象一建立就会调用预知相对应的构造函数,即Zi(int x)
  41.                 并将4传给x,而子类构造函数会默认去访问父类!!空参数!!的构造函数(即使该子类构造函数中有参数也不影响).
  42.                 所以,你的程序,会直接运行父类中的空参数构造函数,而非有参数的那个

  43.           */
  44.         }
  45. }
复制代码
回复 使用道具 举报
因为无论你创建的子类对象时构造函数有没有参数,第一行隐藏的都是super();而不是super(int x);既然没有调用到含有参数的父类构造函数,当然就不执行了。

你要是想让他执行,就手动在子类构造函数的第一行填上super(x);用它覆盖掉默认的无参构造函数。
回复 使用道具 举报
小冰块 发表于 2013-6-4 16:12
因为无论你创建的子类对象时构造函数有没有参数,第一行隐藏的都是super();而不是super(int x);既然没有调 ...

你好,能放个代码来看看吗?
回复 使用道具 举报

回答的太好了,赞一个,不愧是同班同学
回复 使用道具 举报
class Fu
{
        Fu()
        {
                System.out.println("fu run");
        }

        Fu(int x)
        {
                System.out.println("fu...****..."+x);
        }
}

class Zi extends Fu
{
        Zi()
        {
                //super();
                System.out.println("zi run");
        }
        Zi(int x)
        {
                super(x);//<----就是这里
                System.out.println("zi..."+x);
        }
}

class  ExtendsDemo4
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                Zi z1= new Zi(4);
        }
}

以下是运行情况:
这是没改之前的:
D:\Java\0601>java ExtendsDemo4
fu run
zi run
fu run
zi...4
这是该了之后的:
D:\Java\0601>javac ExtendsDemo4.java

D:\Java\0601>java ExtendsDemo4
fu run
zi run
fu...****...4
zi...4


顺便问一句,谁能告诉我怎么在贴子里加上面那种带上行号的程序代码?

回复 使用道具 举报
bushangkoukou 发表于 2013-6-4 19:29
回答的太好了,赞一个,不愧是同班同学

:funk:同班?呃呃呃,你是??
回复 使用道具 举报
小冰块 发表于 2013-6-4 19:37
class Fu
{
        Fu()

高级模式里面有个添加代码
回复 使用道具 举报
闫月乐 发表于 2013-6-4 19:39
同班?呃呃呃,你是??

看头像就知道了啊,哈哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马