【问题标题】:Java: How do I call a method that implements another method in an interface?Java:如何调用在接口中实现另一个方法的方法?
【发布时间】:2020-02-16 16:50:29
【问题描述】:
public interface Directory {

    public void insertEntry(Entry entry, String surname);

假设我有这个方法,它是 Directory 接口的一部分。

public void insertEntry(Entry entry, String surname) {
}

然后我创建一个名为arrayDirectory 的单独类,它在Directory 中实现相同的方法。 然后如何在arrayDirectory 类中调用此方法?因为我试图在 main 中调用它,但是该方法必须是静态的才能执行此操作,并且它不能是静态的,因为那样它就不会从接口实现该方法,并且我不允许更改该方法接口中方法的签名。请帮忙,我不知道该怎么办。

【问题讨论】:

  • 你需要创建一个类的实例,并在实例上调用你的方法。
  • 创建一个像 Directory d = new arrayDirectory(); 这样的实例并调用类似 d.insertEntry(); 的方法

标签: java methods interface


【解决方案1】:

implements

将您的类定义为实现该接口。使用关键字implements

此外,在 Java 约定中,类名以大写字母开头。所以将你的班级命名为ArrayDirectory,而不是arrayDirectory

public class ArrayDirectory implements Directory 
{
    public void insertEntry(Entry entry, String surname) 
    {
        System.out.println( "Doing insertEntry work." ) ;
        …
    }
}

多态性

现在使用该类,通过instantiating 一个对象通过new。如果您只调用接口上定义的方法,请将该对象称为interface 而不是具体类。

Directory directory = new ArrayDirectory() ; 

这种技术被称为polymorphism(“许多形状”)。 Dog 对象可能被称为更一般的AnimalCircle 对象和 Rectangle 都可能被称为 ShapeInternationalShippingLabelDomesticShippingLabel 可能都被称为 ShippingLabelPreferredCustomerStandardCustomer 类都可以实现Customer 接口。

动态调度

然后调用该对象的方法。

directory.insertEntry( … , … ) ;

通过dynamic dispatch 的魔力,JVM 在运行时定位ArrayDirectory 类上要执行的必要代码。

顺便说一下,请注意这里的命名约定。类名以大写字母开头,而对象(实际上是引用变量)以小写字母开头。而且,仅供参考,Java 命名使用全范围的 Unicode 字符(法语口音、日语等),而不仅仅是英语 ASCII 字符。

抽象类

如果各个类有一些重复的代码,请将它们的共享接口改为抽象类。然后,您可以将重复的代码移动到抽象类中。这样,当您以后进行审查或进行维护工作时,您只有找到、研究和修复该代码的地方。

【讨论】:

    猜你喜欢
    • 2020-06-21
    • 2022-01-23
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多