【问题标题】:Calling method from an array of type Object从 Object 类型的数组中调用方法
【发布时间】:2020-02-26 09:08:55
【问题描述】:

编辑哦,天哪,我的意思是说 UAV 是另一个父类

我有各种各样的课程,有些是父母,有些是孩子 例子

Parent Class Airplane 
Child  Class Helicopter
Parent  Class Uav

Airplane 类有一个访问器方法,称为 getPrice() 简单地返回实例变量 price。

当我得到一个包含所有这些不同类型的对象数组时,问题就出现了,例如

Airplane aObj=new Airplane();

Helicopter hObj=new Helicopter();

Uav uObj=new Uav();

Object flying_Array[]=new Object[4];

flying_Array[0]=aObj;

flying_Array[1]=hObj;

flying_Array[2]=uObj;

现在当我尝试做 fly_Array[0].getPrice();

// eclipses 给我一个错误,我的方法没有出现在提案中。

//这是我的第一篇文章,所以如果我的格式很奇怪,我很抱歉。

【问题讨论】:

    标签: java arrays inheritance methods polymorphism


    【解决方案1】:

    Object 没有定义 getPrice 方法,但 Airplane 有。您应该创建一个 Airplane 类型的数组。

    Airplane flying_Array[]=new Airplane[4];
    

    由于 Helicopter 和 Uav 类扩展了 Airplane 类,您可以将 Helicopter 或 Uav 的实例分配给 Airplane 类型的变量。

    【讨论】:

    【解决方案2】:

    1.理论

    你应该先了解java的多态性。在字符下,我们可以将子类实例赋值给父类类型变量。但要注意变量的类型是父类,所以只能调用父类中的方法。

    2.你的情况

    数组类型是 Object ,这意味着变量类型是 Object ,所以我们可以将 Airplane 实例及其子元素分配给数组元素。但是,当 我们想通过变量(Object类型)调用方法,只能调用Object中的方法。

    3.解决方案:

    只要用Airplane代替数组的类型,在这个多态中,父类是Airplane,它有getPrice()方法。

    Airplane aObj=new Airplane();
    
    Helicopter hObj=new Helicopter();
    
    Uav uObj=new Uav();
    
    Airplane flying_Array[]=new Airplane[4];
    
    flying_Array[0]=aObj;
    
    flying_Array[1]=hObj;
    
    flying_Array[2]=uObj;
    

    :D

    【讨论】:

    • 对此我感到非常抱歉!我的意思是说无人机是它自己的父类。那我将如何处理这种情况?我真的很感谢你的帮助:)
    • 没关系。如果我们想从Object中区分Airplane和Uav,我们可以在调用getPrice()方法之前尝试这样判断: if(flying_Array[0] instance of Airplane){ (Airplane (flying_Array[0])).getPrice();}。 “instanceof”是java的保留字,表示左边的实例是右边的类的类型(或者继承右边的类)。
    猜你喜欢
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2013-07-20
    • 2013-01-22
    • 2016-02-23
    • 1970-01-01
    • 2018-01-09
    • 2022-10-30
    相关资源
    最近更新 更多