[英]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
接口,然后在两个类中实现它: Boy
和Girl
。 如果在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.