OwnerContribution oc = new OwnerContribution();
oc.amount = 10;
oc.comments = "Test Entry";
oc.date = System.DateTime.Now;
oc.paymentType = "Check";
oc.referenceNumber = "12345";
Owner ow = new Owner();
ow.ID = 12345;
LedgerItem[] li = new LedgerItem[1];
li[0] = oc;
OwnerLedger owl = new OwnerLedger();
owl.items = li;
OwnerLedger owl1 = client.appendOwnerLedgerItems(owl,ow); // This is where i get the cast error
我正在尝试调用Thread类构造函数,Thread(String name)而不是使用super(name),但是当我使用新的Thread(String name)输出时会有所不同。请解释不同的输出。 是因为默认的超级构造函数吗?如果是这样,那么我如何使用父构造函数Thread(String name)而不使用super()?
答案 0 :(得分:7)
super(name)
和new Thread(name);
远程做同样的事情。
super(name)
调用当前实例的父构造函数,使其有机会在子类启动初始化其部分实例的过程之前初始化其实例部分。 / p>
new Thread(name)
创建一个完全独立的新Thread
,然后抛弃它(因为你从未将结果保存在任何地方)。这与您使用new
的任何其他时间完全一样:您正在创建新对象,而不是调用您的超类构造函数。
如果是,那么我如何使用没有super()的父构造函数Thread(String name)?
您的子类需要为超类提供初始化的机会。如果您不编写对super(...)
的调用,Java编译器将为您插入对super()
(无参数)的调用。所以这个问题没有意义:在Thread
子类中,您可以使用Thread
为super(...)
提供初始化的机会。你没有使用new Thread(...)
。
你可以在该代码中使用new Thread
创建一个全新的,独立的独立线程,就像你可以使用new HashMap
创建一个新的{{1} }。但我非常怀疑你是否愿意。这与你的班级的超类是HashMap
的事实毫无关系。
答案 1 :(得分:3)
如果您拨打new Thread(String name)
而不是super(name)
,则表示您正在创建一个新的Thread
对象(与您刚构建的NewThread1
实例无关),并通过它是name
参数。因此,在这种情况下,您的NewThread1
实例具有默认名称(因为编译器隐式添加super()
以调用Thread
无参数构造函数。
NewThread1 (String name) {
new Thread(name);
System.out.println("child Thread:"+this);
}
与
相同NewThread1 (String name) {
super(); // name is not passed to the super class constructor
new Thread(name);
System.out.println("child Thread:"+this);
}