class A {
public void a1() {}
}
class B extends A {
public void b1() {}
}
public class Test3{
public static void main(String[] args) {
B b = new B();
A a = (A)b;
System.out.println(a instanceof B);
}
}A a = (A)b;
System.out.println(a instanceof B);
结果是 true
a不能调用b1
是什么原因啊
请教 请赐教!!~~~
public void a1() {}
}
class B extends A {
public void b1() {}
}
public class Test3{
public static void main(String[] args) {
B b = new B();
A a = (A)b;
System.out.println(a instanceof B);
}
}A a = (A)b;
System.out.println(a instanceof B);
结果是 true
a不能调用b1
是什么原因啊
请教 请赐教!!~~~
解决方案 »
- 求JButton上的文字打出X的Y次方的方法,X小,Y作为上标,不能用X^Y表示
- 关注程序执行效率的进,Swing使用Timer定时刷新会影响程序效率。如何解决?
- 问个验证IP地址加端口号的正则表达式
- 菜鸟请问在命令行编译文件时显示乱码应该怎么办?
- JFrame a = new MyJFrame();谁能帮忙解释一下?
- 连接Oralce出现异常,大侠帮忙啊
- 如何用J2SE的知识开发一套类似"网易助手"的无人回复程序
- 如何在panel 的给定位置加入 button? ---100分
- 关于lucene的PhraseQuery的菜鸟问题
- JAVA连接ACCEss问题
- 谁能解释一下
- 给道算法题看看哪位大侠能做出来?
结果是 true
那这句话怎么解释啊?
虽然不能调用b1但他确实是一个B对象你可以尝试在B类覆盖a1方法然后调用a.a1();你会发现调用的是B类中的方法
但他既然是B对象 为什么不能调用b1呢?
看看
他既是一个B也是一个A,还是一个Object
a没有B的方法
1.a实际上就是B类的对象,所以System.out.println(a instanceof B); 结果是 true。
2.在程序里,你做了向上转型,把a当成A来看待,作为调用者的Test3并不知道a实际是什么类型,只能当成A类处理,所以,这时的a就只能调用A类里的方法了。
既然你a已经申明成A类类型,而A类类型没有a1方法,a.a1()的写法当然不能通过编译了。
这并不是说不能调用a1方法,而是如果要调用,就要明确地进行强制类型转换,实际上就是告诉编译器,我对a1的类型负责,我知道它就是B。
这跟long赋值给int要做类型转换是相似的。
instance of是运行时动态判断,所以是true