为什么不能这样()和超()都一起在构造函数中使用吗?

为什么不能this()super()都一起在构造函数中使用吗?

什么是整合这样的事情的原因吗?

--------------解决方案-------------

this(...)将调用在同一类,而另一个构造super()将调用超级构造函数。 如果没有super()在构造函数,编译器将隐式添加。

因此,如果两者都允许你可能最终调用super构造的两倍。

示例(不看在参数的意义上):

class A {
public A() {
this( false );
}

public A(boolean someFlag) {
}
}

class B extends A {
public B() {
super();
}

public B( boolean someFlag ) {
super( someFlag );
}

public B ( int someNumber ) {
this(); //
}
}

现在,如果你调用new B(5)下面的构造函数被调用:

this( false);
A() ---------------> A(false)
^
|
| super();
|
| this();
B() <--------------- B(5) <--- you start here

更新

如果你能够利用this()super()你可能最终会像这样的东西:

注意 :这是为了证明什么可能出问题, 如果你被允许这样做 -你幸好不是)

this( false);
A() ---------------> A(false)
^ ^
| |
| super(); | super( true ); <--- Problem: should the parameter be true or false?
| |
| this(); |
B() <--------------- B(5) <--- you start here

正如你所看到的,你会碰上其中一个问题A(boolean)构造函数可以使用不同的参数调用,你现在不得不以某种方式决定哪些应该被使用。 此外其他的构造函数( A()B()可能包含的代码,现在有可能不能正确调用(即出故障等),因为在调用super( true )会绕过他们,而this()不会。

之间是有区别super()this()

super() -调用基类的构造函数,而
this() -当前调用类的构造函数。

无论this()super()是构造函数调用。
构造函数必须始终是第一个语句。 所以我们不能有两个语句,第一条语句,因此,无论是我们可以称之为super()或者我们可以称之为this()从构造函数,但不能同时使用。

无论this()super()是构造函数调用,并且构造函数调用必须在构造函数的第一个(也是唯一的第一个)调用。 否则,该Object的构造函数会被调用一次实例化一个对象的时候多。

因为它没有任何意义。 构造函数必须或者调用this()super()或明或暗地)。 this()调用其中有来电或是其他的构造this()super()等和以前一样。 那个叫两个构造函数this()super()因此最终将调用super()的两倍。

分类:java的 时间:2015-03-15 人气:0
本文关键词: java的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.618 (s). 10 q(s)