繁体   English   中英

继承Java超类和类型转换

[英]Inheriting Java super class and Type Casting

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

但是,当您键入强制转换时(通过将(B)放在括号中的a2之前),它的读取方式如下:

(Turn a2 into B).method2();

可以正常运行,因为它先将a2变成了B,其中包括方法2。

与数学概念轻松比较时,就像计算值的操作顺序一样。 您不会说5 + 5 * 2 = 20 ,而是5 + 5 * 2 = 15 ,因为它首先计算5 * 2 ,然后加5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM