免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5774 | 回复: 1
打印 上一主题 下一主题

子类的构造函数中,第一句写不写super()都一样吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-31 16:34 |只看该作者 |倒序浏览
20可用积分
下面这个程序的输出总是
father
child
为什么有没有super()调用,结果都一样呢?
那么ctor里面第一句话写上super()又有什么意义呢?
---------------------------------------------------
public class my {
        public static class f{
                public f(){
                        System.out.println("father");
                }
        }
        public static class c extends f{
                public c(){
                        //super();  有没有这句话似乎都一样。
                        System.out.println("child");
                }
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                @SuppressWarnings("unused")
                my.c c1=new my.c();
        }
}

最佳答案

查看完整内容

java的继承关系就是从父类的构造函数到子类的构造函数。一步一步往下执行。Java在实例化一个对象的时候,如果没有显式使用super(),则会先调用父类的无参构造函数(不是和自己构造函数参数数量对应的那个),然后调用子类的构造函数,如果父类不是Object类,则一直向上追溯到Object类为止,super()只能在构造函数的第一行使用,在别的地方使用均为非法,一般情况下构造函数不用写super(),但是如果一个类有多个构造函数的时候,为了 ...

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2010-08-31 16:34 |只看该作者
本帖最后由 renxiao2003 于 2010-08-31 16:55 编辑

java的继承关系就是从父类的构造函数到子类的构造函数。一步一步往下执行。
  1. public class Test {   
  2.     public static void main(String[] args) {   
  3.         new Son("baidu");   
  4.         new Son();   
  5.     }   
  6. }   
  7.   
  8. class Farther{   
  9.     public Farther(){   
  10.         System.out.println("I am father");   
  11.     }   
  12.   
  13.     public Farther(String name){   
  14.         System.out.println("I am father:"+name);   
  15.     }   
  16. }   
  17.   
  18. class Son extends Farther{   
  19.     public Son(){   
  20.        System.out.println("I am son");   
  21.     }   
  22.     public Son(String name){   
  23.         //super("google");   
  24.         System.out.println("I am son:"+name);   
  25.     }   
  26. }  
复制代码
Java在实例化一个对象的时候,如果没有显式使用super(),则会先调用父类的无参构造函数(不是和自己构造函数参数数量对应的那个),然后调用子类的构造函数,如果父类不是Object类,则一直向上追溯到Object类为止,super()只能在构造函数的第一行使用,在别的地方使用均为非法,一般情况下构造函数不用写super(),但是如果一个类有多个构造函数的时候,为了便于理解,往往要显式调用super()。

  上面代码的运行结果为:

I am father
I am son:baidu
I am father
I am son

论坛徽章:
0
3 [报告]
发表于 2010-09-01 08:38 |只看该作者
牛人呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP