作者adrianshum (Alien)
看板java
标题Re: [问题] 建构子和this super的问题
时间Fri Jul 20 19:41:53 2007
※ 引述《[email protected] ( )》之铭言:
: ※ 引述《[email protected] (艾德华)》之铭言:
: > 新手发问,请指教@@
: > 想请问一下在继承时的建构子里面,如果子类别的建构子中有
: > 出现this或是super是不是执行的顺序会先是super(或this)
: ===>一个建构子的第一行,一定是this或是super(如果user没设,预设是super();
: ),所以一定会先执行this 或是super
错. 见下面
: > 然後才是父类别的建构子?
: ====>会不会呼叫到父类别的建构子,要看你是写了this还是super
错.
无论如何, parent class 的 constructor 是会先跑的.
就算跑别另一个 constructor, 最先跑的还是parent class
的 constructor
: > 也就是说顺序是->子类别建构子->先执行父类别建构子(当有this时先执行)
: > ->然後才是子类别建构子内容
: ===>当你写了this时,是指呼叫这个子类别的另一个建构元(看是否有传参数)
: ,super()才是呼叫父类别的建构子
但你 invoke 的另一个 constructor, 最先还是会
invoke parent class 的 constructor.
: > 例如
: > class A{
: > A(){
: > ....
: > }
: > } //不管是否带参数的建构子
: > class B extends A{
: > B(){
: > this('a'); //先执行这行,才执行建构子A()?
: > }
: > }
: > public class Extends1{
: > public static void man(String[] args){
: > B b=new B();
: > }
: > }
: > 不知道看不看的懂我的问题.感谢ORZ
: ===>以上的程式,是会编译错误的,当你呼叫了B(),执行到 this('a'),是指呼叫
: B类别里的另一个建构子,而它的参数是字元,如果你在B类别里加上
: B(char x){super();},编译才会成功
加上
B(char x) {} 就行了, 不需 super() 也行.
因为 default 是会帮你 invoke super 的 no-arg
constructor 的.
Alien
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.22.246.26