【发布时间】:2012-02-11 11:50:45
【问题描述】:
非常简单的测试代码:
interface Base {
void interfaceTest();
static final String m = "1";
}
interface Child extends Base {
void interfaceTestChild();
}
class BaseClass implements Base {
@Override
public void interfaceTest() {
System.out.println("BaseClassInterfaceTest");
}
}
class ChildClass implements Child {
@Override
public void interfaceTest() {
System.out.println("ChildClassInterfaceTest");
}
@Override
public void interfaceTestChild() {
System.out.println("interfaceTestChild");
}
}
public class Src {
public Child testFunc() {
Base x = new BaseClass();
return (Child)x; <==Here got an "ClassCastException"
}
public static void main(String args[]) {
Src testSrcInstance = new Src();
testSrcInstance.testFunc().interfaceTest();
}
}
在return (Child)x; 行中,我得到了一个“ClassCastException”,我对此感到很困惑,因为Child 扩展了Base,所以x 应该成功转换为Child。这种对话被一些android代码模仿:
EditText的getText()方法是:
public Editable getText() {
return (Editable) super.getText();
}
而EditText的超类是TextView,其中getText()方法是:
public CharSequence getText() {
return mText;
}
mText 是一个CharSequence,注意Editable 扩展了CharSequence,所以你可以看到,这些android 代码将CharSequence 转换为Editable,就像我一样,将Base 转换为Child,有什么区别吗?
【问题讨论】:
标签: java android interface casting