我试图将接口等同于实现该类的类。
我有一个名为SortedSetADTx.java的接口 我有一个名为BstSetKTUx.java的类
现在在我的主要课程中我有两个变量
private static SortedSetADTx<Automobilis> autoSet;
private static BstSetKTUx<Automobilis> autoSetBst;
在我的一个功能中我想这样做:
autoSet = new BstSetKTUx(new Automobilis());
autoSetBst = autoSet;
我得到一个错误,那两个是不兼容的类型。 我之所以这样做,我想使用BstSetKTUx类所具有的功能。 我希望你能理解我的问题,这很难解释。
答案 0 :(得分:1)
您可能想要尝试类型转换autoset
,因为它不是BstSetKTUx
类型的......您只能将来自同一类的对象等同起来。
即autoSetBst = (BstSetKTUx<Automobilis>)autoset;
答案 1 :(得分:0)
您有以下变量:
SortedSetADTx<Automobilis> autoSet;
BstSetKTUx<Automobilis> autoSetBst;
请注意,autoSet
的类型为SortedSetADTx
,但不是BstSetKTUx
。但是,autoSetBst
类型为BstSetKTUx
,以及类型为SortedSetADTx
的,因为BstSetKTUx
实现了SortedSetADTx
。
因此,您无法将autoSet
分配给autoSetBst
,但您可以反过来执行此操作:
autoSetBst = new BstSetKTUx(new Automobilis());
autoSet = autoSetBst;
答案 2 :(得分:0)
当BstSetKTUx
实现SortedSetADTx
时,你可以简单地尝试这段代码:
autoSet = new BstSetKTUx<Automobilis>(new Automobilis());
autoSetBst = (BstSetKTUx<Automobilis>) autoSet;
我在这里做的主要改变是对BstSetKTUx<Automobilis>
的强制转换。由于我们知道autoSet
包含BstSetKTUx<Automobilis>
(请参阅我的代码段的第一行),因此我们无需首先检查autoSet
的课程即可投出。
如果您在尝试转换为autoSet
之前碰巧不知道BstSetKTUx<Automobilis>
包含的内容,我建议您使用instanceof
运算符。
// given we don't know if autoSet contains a BstSetKTUx instance or not
if(autoSet instanceof BstSetKTUx) {
// we can cast to BstSetKTUx without any problems
autoSetBst = (BstSetKTUx<Automobilis>) autoSet;
} else {
// autoSet does not contain an instance of BstSetKTUx
}
除此之外,即使你正在调用构造函数,你也总是指定一个类(<Automobilis>
)的类型参数,这是一个很好的编程习惯。 ;)