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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© heima-shzhch 中级黑马   /  2014-4-11 11:32  /  1707 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在面向对象继承的学习中在子类中默认的子类会去调用父类的那个无参数的构造函数
但是如果父类没有那个无参数的构造函数了,那子类的构造函数是否一定要写的与父类构造函数结构相同

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

3 个回复

正序浏览
子类继承父类,那么子类的构造函数会重载父类的构造函数(可以使有参数的,可以使无参的构造函数),如果你继承了父类,写自己的构造函数,当你写的构造函数父类没有,你如何重载?所以子类构造函数必须与父类的中某个构造函数形成重载,当子类构造函数不写base时候,会自动调用父类无参构造函数,如果父类只有有参的构造函数没有无参的构造函数,编译器会报错,这个你可以自己试试,自己学会调试验证问题才是解决问题的唯一根本方法
回复 使用道具 举报
需要的
如果子类的构造函数是无参数的,那么在创建子类对象的时候 先调用父类的无参数的构造函数
class  zi extends fu
{
     zi()
    {
     super();//这句是隐藏的
     }    zi(int x)
    {
   //这里面也隐藏了一句 super() 即查询父类的无参数构造函数。
     }
zi(int x,int y){
  super(int x);//也可以调用父类的带参数的构造函数
}

}
class fu
{
   fu(){}   fu(int x){}

}


评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
1.子类继承了所有父类的变量,继承的变量中除了私有都可以使用
2,子类在继承父类的时候,构造方法也继承下来,如果父类没有构造函数(默认构造函数为空),子类在创建的时候可以覆盖父类的构造函数(实际上也继承了一个空的父类构造函数);
3,如果父类没有为空的构造函数,子类也不能有空构造函数。
4,子类的构造函数不可以重写父类的构造函数。
  1. class Super{
  2.         int i = 0;
  3.         Super(int i){
  4.                 this.i = i ;
  5.         }
  6. }
  7. class Son extends Super{

  8.         //出错Son(){}
  9.         Son(int i) {
  10.                 super(i);               
  11.         }
  12.         /*Son(String s){
  13.                
  14.         }*///出错

  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马