我有两个Java类
Class A { void method1(){} }
Class B extends A { void method2(){} }
当我运行以下内容时,它可以正常工作:
Class C {
public static void main(String [] args){
A a1 = new A();
A a2 = new B();
B b1 = new B();
((B)a2).method2();
}
}
但为什么以下不起作用?
Class C {
public static void main(String [] args){
A a1 = new A();
A a2 = new B();
B b1 = new B();
(B)a2.method2();
}
}
由于
答案 0 :(得分:1)
你必须在施法后调用该方法。你需要在a2左右括号。
((B)a2).method2();
答案 1 :(得分:1)
就像Kabir所说,你需要在从另一个对象调用方法之前先抛出对象。
这是因为Java将您的第二个语句读取为:
(B) (a2.method2();)
因此,java尝试在A对象a2中使用方法二,但它不能,因为该对象中没有method2()
。
然而,当你输入它时(通过将(B)放在括号中的a2之前),它就像:
(Turn a2 into B).method2();
哪个运行正常,因为它正在将a2变为B,其中包括方法2,预先。
与数学概念的简单比较,就像计算数值的操作顺序一样。你不会说5 + 5 * 2 = 20
,你会说5 + 5 * 2 = 15
,因为它首先计算5 * 2
,然后添加5
。