繁体   English   中英

实例化接口时如何实现自己的方法?

[英]How can I implement my own method when instantiating an interface?

我有一个界面:

public interface ExampleInterface {

  public void exampleMethod();

  public void anotherExampleMethod();

}

还有一个示例类:

public class ExampleClass implements ExampleInterface{


  public ExampleClass() {
    ........
  }

  public void exampleMethod() {
    ..............
  }

  public void anotherExampleMethod() {
    ..............
  }


  public void myOwnMethod() {
    ........
  }

}

我通过使用如下接口实例化该类:

ExampleInterface exampleClass = new ExampleClass();

这样做是可以的:

exampleClass.exampleMethod();

但这不是:

exampleClass.myOwnMethod();

但是,这可行:

ExampleClass exampleClass = new ExampleClass();
exampleClass.myOwnMethod();

当我实例化一个接口并尝试调用不属于该接口一部分的方法时,为什么它不起作用? 无论如何,仍在使用接口实例化的同时调用myOWnMethod()

当您拥有类型为ExampleInterface的引用变量时,不知道它实际上是ExampleClass ,因此无法保证要调用myOwnMethod 您可以创建另一个类, SillyExampleClass实现ExampleInterface ,但你不定义myOwnMethod方法那里。 这就是为什么您不能调用myOwnMethod的原因,它可能在实际的实现中不存在。

如果要在ExampleInterface接口的引用变量上调用myOwnMethod()myOwnMethod在接口定义中包含myOwnMethod ,因为接口定义指定了接口的任何实现中必须包含的内容。

假设您有一个Person接口,然后在两个类中实现它: BoyGirl 如果在Girl类中具有方法bePregnant() ,则在执行以下操作时:

Person person = new Boy();

在该对象中调用bePregnant()方法没有任何意义。 但是,在调用不属于Person接口的某些方法之前,有一种方法可以检查此人是否是Girl

if (person instanceof Girl)
    ((Girl) person).bePregnant();

首先, instanceof用于检查某个对象是否是另一个类的实例(该类也可以是该对象的超类)。 然后,(SomeClass)对象所做的称为casting 在您的情况下,您可以这样做:

ExampleInterface exampleClass = new ExampleClass();
((ExampleClass) exampleClass).myOwnMethod();

在两个示例中,您都将创建ExampleClass的实例。 但是在第一个示例中,您使用ExampleInterface类型的变量(没有方法myOwnMethod)来引用它;在第二个示例中,您使用ExampleClass类型的变量(有方法myOwnMethod)来引用了它! 如果要在ExampleInterface上调用myOwnMethod,可以将其强制转换为ExampleClass。

((ExampleClass) exampleInterface).myOwnMethod()

如果您不确定exampleInterface所引用的对象实际上是否为ExampleClass类型,则无法保存此设置。 否则,您将收到ClassCastException。

暂无
暂无

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

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