| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 832 人关注过本帖
标题:继承中的构造方法问题
只看楼主 加入收藏
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
结帖率:100%
收藏
 问题点数:0 回复次数:7 
继承中的构造方法问题
class SuperClass {
    private int n;
      
  /*   
    SuperClass() {
        System.out.println("SuperClass()");
    }
   */
   
 
    SuperClass(int n) {
        System.out.println("SuperClass(" + n + ")");
        this.n = n;
    }
}

class SubClass extends SuperClass {
    private int n;
   
    SubClass(int n) {
            //super();
        System.out.println("SubClass(" + n + ")");
        this.n = n;
    }
   
    SubClass() {
        super(300);
        System.out.println("SubClass()");
    }
}

public class TestSuperSub {
    public static void main(String arg[]) {
        SubClass sc1 = new SubClass();
        //SubClass sc2 = new SubClass(400);
    }
}

这个程序这么写为什么报错?super(300);不算调用吗?
搜索更多相关主题的帖子: 继承 构造 
2010-03-21 18:44
llooppzhang
Rank: 7Rank: 7Rank: 7
来 自:江苏
等 级:黑侠
威 望:5
帖 子:308
专家分:518
注 册:2009-10-18
收藏
得分:0 
子类和超类的n变量同名?
2010-03-21 20:43
dadongzicool
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:209
专家分:474
注 册:2009-3-20
收藏
得分:0 
因为在父类中显式写出了构造函数class SuperClass {
    private int n;
    SuperClass(int n) {
        System.out.println("SuperClass(" + n + ")");
        this.n = n;
    }
}
,并且此构造函数是带参数的
所以在子类中如果显式声明构造函数,就要用super(n)来调用父类的构造函数;如果不写此语句或者用super()就会调用父类不带参数的构造函数
class SubClass extends SuperClass {
    private int n;
   
    SubClass(int n) {
            //super();
        System.out.println("SubClass(" + n + ")");
        this.n = n;
    }
   
    SubClass() {
        super(300);
        System.out.println("SubClass()");
    }
}
,事实上当你显式声明了父类的构造函数时,系统就不会产生默认的不带参数的构造函数,所以当调用父类不带参数的构造函数时就会报错。

本人出售软件专业毕业设计(包括论文,代码)题目众多,价格从优联系方式:QQ
1635008514(寻找高校代理)
2010-03-21 22:10
dadongzicool
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:209
专家分:474
注 册:2009-3-20
收藏
得分:0 
以下是引用llooppzhang在2010-3-21 20:43:39的发言:

子类和超类的n变量同名?
与变量同名没有关系的 子类不会继承父类中private的变量和方法

本人出售软件专业毕业设计(包括论文,代码)题目众多,价格从优联系方式:QQ
1635008514(寻找高校代理)
2010-03-21 22:12
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
收藏
得分:0 
以下是引用dadongzicool在2010-3-21 22:10:38的发言:

所以在子类中如果显式声明构造函数,就要用super(n)来调用父类的构造函数;如果不写此语句或者用super()就会调用父类不带参数的构造函数
class SubClass extends SuperClass {
    private int n;
   
    SubClass(int n) {
            //super();
        System.out.println("SubClass(" + n + ")");
        this.n = n;
    }
   
    SubClass() {
        super(300);
        System.out.println("SubClass()");
    }
}
,事实上当你显式声明了父类的构造函数时,系统就不会产生默认的不带参数的构造函数,所以当调用父类不带参数的构造函数时就会报错。
我调用的是带参数的呀..super(300)
大大能不能再说的清楚一点。。
2010-03-21 22:32
dadongzicool
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:209
专家分:474
注 册:2009-3-20
收藏
得分:0 
SubClass(int n) {
            //super();
        System.out.println("SubClass(" + n + ")");
        this.n = n;
    }
这个没有啊

本人出售软件专业毕业设计(包括论文,代码)题目众多,价格从优联系方式:QQ
1635008514(寻找高校代理)
2010-03-21 23:32
黄昏の腕轮
Rank: 2
等 级:论坛游民
帖 子:64
专家分:12
注 册:2009-6-13
收藏
得分:0 
我main函数里面没有用SubClass(int n),也必须要声明父类不带参数的构造函数吗?
2010-03-22 01:10
lampeter123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:0 
必须养成良好的习惯,只要存在有参构造函数,就必须要声明无参构造函数。

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-03-22 08:21
快速回复:继承中的构造方法问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014940 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved