当前位置: 首页 > 知识库问答 >
问题:

Java:如何调用主类中的方法,该方法位于扩展抽象类的另一个类中

东门楚
2023-03-14

我被要求创建一个主方法,允许我创建一个狼对象、鹦鹉对象和犀牛对象,我已经为这些动物中的每一个创建了类,他们扩展了抽象类动物,其中包含一个抽象方法makeNoise()。我已经在我的犀牛、鹦鹉和狼类中实现了这个抽象方法,该方法包含一个System.out.println函数和与这些动物中的每一个相关的噪声。例如,我的鹦鹉类(扩展动物)包含一个方法makeNoise(),它打印出“Squawk”。

我被要求证明我可以为我的主要类中的每一个动物对象调用这个makeNoise方法,我该怎么做呢?

public class Main() {
     Wolf myWolf = new Wolf();
     //I want my wolf to make a noise here

     Parrot myParrot = new Parrot();
     //I want my parrot to make a noise here

     Rhino myRhino = new Rhino();
     //I want my rhino to make a noise here
}

共有2个答案

秦锐
2023-03-14
public class Main
{
    Animal myWolf = new Wolf();
    Animal myParrot = new Parrot();
    Animal myRhino = new Rhino();

    public void someMethod() {
        System.out.println(myWolf.makeNoise());
        System.out.println(myParrot.makeNoise());
        System.out.println(myRhino.makeNoise());
    }
}

因为动物是一个抽象类,它有抽象方法makeNoise(),所以可以使用抽象类本身,并为它分配实现所述方法的任何子类。不同的分配显示了多态,其中makeNoise()可以有不同的解释。将Parrot更改为Rhino将导致makeNoise()的不同实现。

赵智勇
2023-03-14

你的代码甚至是无效的Java,你混合了类和方法语义学(很可能还有它们背后的概念)。

您的类将需要一个main方法来使您的类从外部可执行。

public class Main {
     Wolf myWolf = new Wolf();
     Parrot myParrot = new Parrot();
     Rhino myRhino = new Rhino();

     public static void main(String[] args) {
         myWolf.makeNoise();
         myParrot.makeNoise();
         myRhino.makeNoise();
     }
}
 类似资料:
  • 我有一个抽象类B,它扩展了另一个抽象类A。在抽象类A中,我有一个受保护的方法转换。我想测试方法foo,它从没有实现的基类调用方法convert。如果无法更改转换方法签名,如何模拟方法转换。 我使用Mockito.spy()调用真正的方法,但转换方法是不可用的嘲弄(通过Mockito.when(...)。 告诉我如何测试方法foo。

  • 问题内容: 我想在自己的类中调用抽象类的方法。抽象类是: 我想调用上面的方法,并且调用的类是: 每当我尝试运行上述类时,它都会在line上引发NullPointerException 。谁能告诉我如何解决这个问题? 问题答案: 首先,一个抽象类,因此您不能直接实例化它。您必须创建一个子类,比如说它覆盖Call中的任何抽象方法。 获得一个意味着您作为参数传入的任何内容都尚未初始化。因此,在创建Cal

  • 问题内容: 因此,可以说我正在尝试使用从类中获取方法。 但是该类正在扩展另一类,即带有方法的类。我不太确定这是否会使它抛出异常。 我知道正在扩展的类具有getFile方法。对不起,如果我听起来混乱,有点累。 问题答案: 听起来您只需要使用而不是即可。整个要点是,它 仅 查找在您要对其调用的类中声明的方法: 返回一个Method对象,该对象反映此Class对象表示的类或接口的指定声明方法。 鉴于:

  • 问题内容: 我正在查看Java 8接口中的新虚拟扩展方法: 我的目的是允许接口随着时间的推移以及多重继承的发展而演变,但是在我看来,它们看上去非常像抽象类。 如果您要进行新工作,则是使用抽象类而不是扩展方法来为“接口”提供实现,或者这两种方法在概念上是否等效? 问题答案: 这种构造的主要目的是保持向后兼容性。在Java语言中添加闭包是一个重大的更改,需要对其进行更新以充分利用此功能。例如,在Jav

  • 问题内容: 在Python中,有没有一种方法可以从另一个类中调用一个类方法?我正在尝试在Python中旋转自己的MVC框架,但无法弄清楚如何从另一个类的一个类调用方法。 这是我想发生的事情: 我正在从PHP慢慢进入Python,因此我正在寻找与PHP等效的Python 。 问题答案: 更新:刚刚在您的帖子中看到了对它的引用。那不一样。用于获取函数对象,然后使用您的参数调用它 现在是一个实际的函数对

  • 我有一些服务类,它们扩展了带有@Annotation1注解的BaseService类。在@Annotation1中还有另一个注释-@Annotation2。 我希望能够创建aspect方法,它在用@Annotation2注释的类中的所有方法之前运行,所以在任何扩展BaseService类的服务中都是如此。 当我直接在BaseService中应用@AnNotation2时,我可以运行方面方法,或者当