java父类的构造方法为什么不能被子类继承
6个回答
展开全部
子类=父类﹢新增的变量﹢新增的方法。对象语言的构造器作用在于对类创建实例对象时完成对象的初始化工作(为变量申请内存空间等)
因此,子类的构造器除了承担着初始化子类的新增变量和方法,还要初始化父类自身新增加的变量和方法。一般来说,如果在子类的构造器中没有使用super()调用父类相应的构造器,子类的构造器会自动调用父类默认的,也就是不带参数的构造器来初始化父类的东西。
而Java类的默认构造器,当你没有为你写的类建造构造器的时候,Java会自动帮你创建这个默认构造器,但是当你自己编写了构造器后,你自己编写构造器将会覆盖掉默认的构造器,就是说默认的构造器不存在。那么这个时候,你在继承的子类里面没有显示添加super()函数调用你在父类里编写的父类构造器,子类的构造器将不能自动找到父类的构造器。找不到父类的构造器意味着什么?意味着你的子类实例化的时候找不到父类的构造器来初始化父类的东西,不能完成类实例对象的初始化工作,你说你的子类能不出现错误?!
所以,在子类的构造器中需不需要添加super()调用父类相应的构造器,只需要考虑子类的构造器才初始化的时候能不能完成所有变量和方法的初始化就可以了。另外,根据自己初始化工作的需要使用super()调用相应的父类构造器来初始化也是有必要的。
所以你所说的子类不能继承父类构造器,这说明你没有显式的调用seper(),而且父类构造器被你的子类覆盖或调用的父类中没有无参构造器所引起的。
因此,子类的构造器除了承担着初始化子类的新增变量和方法,还要初始化父类自身新增加的变量和方法。一般来说,如果在子类的构造器中没有使用super()调用父类相应的构造器,子类的构造器会自动调用父类默认的,也就是不带参数的构造器来初始化父类的东西。
而Java类的默认构造器,当你没有为你写的类建造构造器的时候,Java会自动帮你创建这个默认构造器,但是当你自己编写了构造器后,你自己编写构造器将会覆盖掉默认的构造器,就是说默认的构造器不存在。那么这个时候,你在继承的子类里面没有显示添加super()函数调用你在父类里编写的父类构造器,子类的构造器将不能自动找到父类的构造器。找不到父类的构造器意味着什么?意味着你的子类实例化的时候找不到父类的构造器来初始化父类的东西,不能完成类实例对象的初始化工作,你说你的子类能不出现错误?!
所以,在子类的构造器中需不需要添加super()调用父类相应的构造器,只需要考虑子类的构造器才初始化的时候能不能完成所有变量和方法的初始化就可以了。另外,根据自己初始化工作的需要使用super()调用相应的父类构造器来初始化也是有必要的。
所以你所说的子类不能继承父类构造器,这说明你没有显式的调用seper(),而且父类构造器被你的子类覆盖或调用的父类中没有无参构造器所引起的。
2013-04-01
展开全部
父类的构造器不能不继承,这个是规则!下面代码说嘛了这个问题:class Fruit{public Fruit(String name){System.out.println("执行Fruit类的构造器!!!");}}//定义Apple类并继承fruit类class Apple extends Fruit{//没有编写构造器}public class Test{public static void main(String[] args){//创建对象new Apple("红富士");}}fruit中有一个public得带参构造器,若可以继承那么子类Apple也应该有。创建对象时,试图调用继承来的构造器,但是编译出错出错有两个1,由于父类fruit中没有无参构造器,子类Apple又没有编写自己的构造器明确调用了父类带参构造器,而造成编译出粗偶2,由于构造器不能被继承,因此Apple中没有,带参构造器造成的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-01
展开全部
Person(){}把它去掉或者改成Public Person(){}你没有给他修饰符,默认是friendly ,子类是不能继承的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
构造方法名与类名相同,只在对象被创建时自动调用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个不可能吧,你把代码贴下,让大家看看是什么情况。你怎么知道不能继承的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询