有没有讨论技术的,进来看下…
java吧
全部回复
仅看楼主
level 9
遗忘先生_
楼主
问:既然子类实例初始化时会先调用父类的构造方法。我想问得是为什么java一定要这么做?还有创建子类对象会创建父类对象吗?
2015年09月15日 15点09分
1
level 9
丿懂得珍惜丶
哟哟哟
2015年09月15日 15点09分
2
遗忘先生_
?能解决下吗
2015年09月15日 15点09分
level 9
遗忘先生_
楼主
有人没
2015年09月15日 15点09分
3
level 9
遗忘先生_
楼主
如果调用父类构造器是为了初始化继承来的变量,那么如果调用的是空构造器该怎么初始化继承来的变量呢,并且执行完父类构造器后会不会返回一个父类对象呢
2015年09月15日 15点09分
5
草莓DE奶茶
构造器就是用来初始化变量的。
2015年09月16日 00点09分
wu482525
初始化不一定是给变量赋值,是给变量预留空间,如果没赋值,成员变量有默认值
2015年09月16日 16点09分
level 9
遗忘先生_
楼主
困惑啊
2015年09月15日 15点09分
6
level 7
奶碎西瓜
你继承他了就要调用他的构造方法啊
2015年09月15日 16点09分
7
遗忘先生_
当然,我问得是为什么要?java强制这样实行的原因是什么
2015年09月15日 16点09分
奶碎西瓜
回复
��������_
:当然啦,不然叫啥面向对象。
2015年09月15日 16点09分
level 7
qidashi2
我屡屡:子类怎么来的?是继承了父类是父类的延伸,当你要new一个子类对象的时候,它首先会执行行其相应的构造方法,而每一个构造方法之中的首行都有个super()即其直接父类的构造方法,通常可省略。java中一切皆对象,所以任何非object的类都会有个super()构造函数,直到执行到这个super()是object类为止!
2015年09月15日 16点09分
8
lj467640597
哇,正解
2015年09月15日 16点09分
du受爱Goo攻
这个在理
2015年09月16日 00点09分
level 8
weivil
构造子类首先要构造父类、就相当于没有父亲哪有儿子一样
2015年09月15日 16点09分
10
level 13
啥药拉拉☎
很直观的一个问题,你和你爸爸,先有谁去?
2015年09月15日 16点09分
11
level 8
静若云茹
首先你构造了一个子类的对象,说不定你就想调用父类的方法
说不定父类的方法就要用到一个叫a的成员变量
说不定这个a就是在父类的空构造方法,或者某个构造方法里面赋值的,比如我让a=3
那么如果你不调用父类的构造方法,说不定你这个程序就跑不起来,因为你拿不到a的值
为了保证这么多的说不定都变成一定,就必须一路向上执行所有父类的构造方法。
2015年09月15日 16点09分
12
遗忘先生_
层主的有道理,那么创建子类对象后会创建父类对象吗
2015年09月15日 19点09分
静若云茹
回复
��������_
:并不会
2015年09月15日 23点09分
陈晨85241
回复
��������
:不创建父类对象怎么调用父类非静态方法?
2015年09月16日 12点09分
静若云茹
回复
634412052
:子类对象包括父类的所有可继承内容,只是你没有写出来。所以你创建的子类对象本身就是一个完备的类,本身就有从父类继承来的方法和成员变量,不需要从父类去拿。
2015年09月16日 15点09分
level 4
lj467640597
系统默认会在每一个类生成一个空的构造方法,如果你自己创建了,那么系统的就删除了,如果你父类有了自己写的构造方法,而子类没有写构造方法,那么系统会默认生成一个空的构造方法,里面有一个隐藏的方法,super(),你可以看成这代表父类的构造方法,而这个是无参,且空的,那么这个子类的super()跟父类的构造方法是否对得上? 懂了吧?之所以调用是因为子类的默认调用要跟父类的构造方法达成一致,不然会导致子类找不到父类构造而报错
2015年09月15日 16点09分
13
遗忘先生_
我知道会报错,我是问得java这么做的原因是啥…
2015年09月15日 19点09分
lj467640597
回复 遗忘先生_ :我不是说的很清楚了吗,子类默认调用找不到父类的构造匹配
2015年09月16日 04点09分
遗忘先生_
回复 lj467640597 :嗯,理解了,因为子类每个构造器前都会隐式加上这一句,但是,我想知道java为啥要加强这一句…
2015年09月16日 05点09分
wu482525
你盗用我的头像
2015年09月16日 16点09分
level 10
疼记过
楼主问的是这样做的好处?
2015年09月15日 16点09分
14
遗忘先生_
是的
2015年09月15日 19点09分
疼记过
回复 遗忘先生_ :类进行加载时,有一个类加载器会把所需要的类加载到内存中。子类加载进去的时候父类的一切都会加载在原来的基础上再加载子类自己特有的
2015年09月16日 01点09分
疼记过
回复 疼记过 :包括那些private成员 只是对子类对象不可见,通过反射机制可以验证的,这就说明子类调用父类成员是子类本身new出来就是自带的,这样在原有的基础上对类进行扩展就会很方便,父类一般都是某一类事务的特性,子类就是父类的特例,差不多就这样吧 还有些其他的好处你可以看看
2015年09月16日 01点09分
level 9
遗忘先生_
楼主
还有就是我记得构造器的作用就是返回一个对象,那么子类执行父类构造器后会不会产生父类对象呢
2015年09月15日 19点09分
15
月女之歌
恕我孤陋寡闻 ,我只知道构造器的作用是初始化对象。
2015年09月16日 01点09分
遗忘先生_
回复 k99200801 :我看的李刚的java讲义
2015年09月16日 05点09分
level 12
天嵚无涯
调用父类构造函数,可以获得父类的某些字段和方法。的确,不这样设计也行,但是可想当你继承的时候就要把父类的代码复制粘贴一遍,不仅代码会越来越多,而且当你不能知道父类的内容的时候呢?所以,调用构造函数多爽啊,多想想好处就是了,没必要纠结这些。
2015年09月15日 23点09分
17
level 11
584774597
对象是不分父类和子类的,一个对象只包含当前类以及父类所有的属性,还有当前类的引用,之所以要先调用父类的构造函数是因为要为父类中的属性通常需要父类的构造函数进行初始化,还有子类的构造函数也可以改变父类的属性,所以为了保证子类改变的父类属性不会被父类的构造函数覆盖,所以要求子类调用父类的构造函数必须在第一行,如果你确定父类的构造函数中没做任何有效的操作,那就可以不调用
2015年09月15日 23点09分
18
遗忘先生_
是的
2015年09月16日 05点09分
584774597
回复
��������_
:这回复让我有点搞不清楚是你在给我解答还是我在给你解答了
2015年09月16日 11点09分
遗忘先生_
回复 584774597 :…你向我解答,我的意思是是这样的
2015年09月16日 12点09分
level 12
du受爱Goo攻
子类对象实际上就是一个父类对象,楼主问的子类里第一行调用了super()是否会产生父类对象就像再问:我生了个男孩,他是人类吗?
2015年09月16日 00点09分
19
level 8
月女之歌
这不是技术 这只是基础ABC。
你做葡萄蛋糕是不是想先调用蛋糕模子 再调用葡萄蛋糕模子。
好处就是有序 ,简洁 , 不然你给其他方案试试?
2015年09月16日 01点09分
20
遗忘先生_
虽然基础,但是很多人干了几年也没弄明白的…
2015年09月16日 06点09分
月女之歌
回复
��������_
: 他们这是内化了。就好像我打了几年五笔但是字根表背不出来一样(一是用不上,一是被肌肉内化了)。
2015年09月16日 12点09分
月女之歌
回复
��������_
: 不过是有些没有学到或者还给老师了。
2015年09月16日 12点09分
level 5
snowflakers
为什么子类要调用父类构造?
继承就是想重复使用父类的字段和方法,在你创建了子类对象的时候,必须保证父类域已经初始化好,然后你才能使用它。而大部分情况下域都是使用private的,那么你在子类里访问不到这些private域,又怎么初始化呢?而调用了父类构造器,它就会检查父类的域是否初始化好。然后回到子类构造器,进行子类初始化。 这样就确保了子类在使用父类继承来的域时已经初始化完毕。
创建子类对象会创建父类对象吗?
不会,子类对象里包含了父类所有域,不需要父类了。比如父类有个private String str1;子类有个private String str2;在你new子类的时候,子类对象里就有2个属性: str1和str2,而不是一个子类对象str2 一个父类对象str1
2015年09月16日 02点09分
23
遗忘先生_
那么str1虽然存在与子类中,但是是隐藏的,是这样吗
2015年09月16日 05点09分
level 9
遗忘先生_
楼主
非常感谢大家的留言
2015年09月16日 05点09分
24
1
2
尾页