继承Java超类和类型转换

时间:2015-12-03 02:39:26

标签: java oop subclass

我有两个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();
  }
 }

由于

2 个答案:

答案 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