JAVA初学者!!!!!!!!!!!在线等答案!!!!!!!!!

为什么通不过编译???

class Some{
protected int x;
Some(int x){
this.x=x;
}
}
class Other extends Some{
Other(int x){
//这里要显式调用父类的有参构造方法,否则它会默认调用父类的无参构造方法,
//但是一旦父类定义了构造方法后,系统不再提供默认的无参构造方法,
//那么最终因为找不到父类的无参构造方法而出现编译错误
super(x);
//如果不显式调用父类的构造方法或自身的其他构造构造方法,那么这里隐藏了一句super()
this.x=x;
}
}
public class Main {
public static void main(String[] args) {
Other other=new Other(10);
System.out.println(other.x);
}
}

-------------------------------------------------------------------------------------------

出现的编译错误:

Implicit super constructor Some() is undefined. Must explicitly invoke another
constructor

意思:隐式的超级构造函数some()是未定义的。必须显式地调用另一个构造函数 



--------------------------------------------------------------------------------------------


在子类的构造方法中:


规则:(this(),super()指的是子类与父类的构造方法,非子类的对象this和父类的对象super)


   1. this()语句或super()语句只能出现第一条语句

   2. 只能有一个this()语句或super()语句,不能2个共存(否则就有2个第一条语句了)[可以有任意个this      和super]

   3. 第一条语句没有super(),也没this(),那么系统将会默认调用父类的无参方法

   4. 第一条语句是super()调用父类的有参构造方法,那么直接调用父类的有参构造方法,而不会执行父类的       无参方法

   5. 第一条语句是this()调用自身的其他构造方法,那么不会再调用父类的任何构造方法

   6. 如果存在多级继承关系,创建子类对象时,以上规则会多次向更高一级应用,一直执行到顶级父类  Object类的无参构造方法为止,比如Object-World-People-Student,创建Student对象时,会自动判断 构造方法的第一条语句是符合以上哪条规则,然后调用相应的父类People构造方法,被调用People构造方法中第一条语句规则,然后再调用相应的World类的构造方法,被调用World的构造方法调用  Object的无参方法,最后结束


 注:


     1.以上规则只对构造方法有用,对成员方法完全没用(因为成员方法无法调用构造方法)

     2.因为创建子类时,有可能调用父类的无参构造方法,如果父类中有自己定义的有参构造方法,系统不会 再给它无参构造方法,要自己定义无参构造方法,否则子类会读取不到父类的无参构造方法而会编译错误

     3.子类无法继承父类的构造方法,只能通过super()调用父类的构造方法

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-03
Some默认的构造函数需要有 x 做参数

当Other类继承Some类后,需要在默认的构造函数内,传参数给父类,以满足其初始化要求。

所以在
Other(int x){
super(x); //传变量给父类
this.x = x;
}本回答被提问者采纳
第2个回答  2013-08-03
基类没有默认的构造函数了,你要用super(x);调用基类的构造函数。希望对你有所帮助!!
第3个回答  2013-08-03
子类的构造函数默认会调用父类的无参构造函数,你父类本来有一个无参构造,但是你手动写了一个有参构造,那么默认的无参构造就没有了,需要手写一个。
你也可以在子类的构造函数中的第一行写super(x),你不写,其实默认写了一行super()只是没显示出来而已。
super()就是调用父类的无参构造。