将接口与实现它的类等同

时间:2014-12-08 17:15:01

标签: java interface implementation

我试图将接口等同于实现该类的类。

我有一个名为SortedSetADTx.java的接口 我有一个名为BstSetKTUx.java的类

现在在我的主要课程中我有两个变量

private static SortedSetADTx<Automobilis> autoSet;
private static BstSetKTUx<Automobilis> autoSetBst;

在我的一个功能中我想这样做:

autoSet = new BstSetKTUx(new Automobilis());
autoSetBst = autoSet;

我得到一个错误,那两个是不兼容的类型。 我之所以这样做,我想使用BstSetKTUx类所具有的功能。 我希望你能理解我的问题,这很难解释。

3 个答案:

答案 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>)的类型参数,这是一个很好的编程习惯。 ;)