class A{
void amethod(){
System.out.println("amethod");
}
void overridenmethod(){
System.out.println("in A");
}
}
class B extends A{
void bmethod(){
System.out.println("bmethod");
}
void overridenmethod(){
System.out.println("in B");
}
}
class Test{
public static void main(String args[]){
A a1 = new A();
if(a1 instanceof B){
B b1 = (B) a1;
b1.amethod();
b1.overridenmethod();
}
}
}
此代码不提供任何编译时或运行时错误。但输出是空白的。在控制台上没有打印。我期待以下输出:
amethod
in A
我做错了什么?请帮忙。提前致谢
答案 0 :(得分:2)
我做错了什么?
A a1 = new A();
if(a1 instanceof B){
B b1 = (B) a1;
b1.amethod();
b1.overridenmethod();
}
不会执行正文,因为a1
会导致B
的实例。 instanceof
表达式始终为false。
如果您使用new A(...)
创建实例,则结果可以用作A
或A
的任何超类型或界面(在您的情况下只有Object
{ {1}})。
B
是A
的子类型,因此您可以将B
视为A
(将其重写的方法替换为A
个),但不是相反。
在您存储A
实例的引用的位置并不重要 - 该实例不会对A
实例进行任何更改。