Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
继承Java超类和类型转换_Java_Oop_Subclass - Fatal编程技术网

继承Java超类和类型转换

继承Java超类和类型转换,java,oop,subclass,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(); } } 但是为什么下面的

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

谢谢

您必须在施法后调用该方法。a2周围需要括号,即

((B)a2).method2();

正如Kabir所说,在从另一个对象调用方法之前,需要先强制转换该对象

这是因为Java将您的第二条语句读取为:
(B)(a2.method2();)

因此java尝试在A对象a2中使用方法2,但它不能,因为该对象中没有
method2()

但是,当您键入cast时(通过将(B)放在括号中a2之前),其内容如下:

(将a2转换为B.method2()

它运行良好,因为它事先将a2转换为B,包括方法2


在与数学概念的简单比较中,它就像计算值的操作顺序。你不会说
5+5*2=20
,你会说
5+5*2=15
,因为它首先计算
5*2
,然后添加
5

,但为什么呢?因为这两条语句都将其强制转换为b,所以您尝试强制转换的是返回值。