我刚开始学习Java,我发现,要调用普通类的方法,我们需要对象,但对于静态类,则不需要任何对象来调用,我们可以使用类引用来实现。但是在编写代码时,我遇到了一些让我感到困惑的代码。代码是。
public class MyInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
String result = actionInvocation.invoke();
在这里我的疑问是,在第三行中,我们为类ActionInvocation有一个引用actionInvocation,我们没有使用任何新关键字,现在检查了在第四行中,我们使用actionInvocation来访问方法invoke()。不使用new关键字怎么办?我还检查了ActionInvocation是抽象接口。
最佳答案
那是完美的代码。 ActionInvocation
实例在其他位置创建,并传递给intercept(...)
方法。实际上,ActionInvocation actionInvocation
只是对扩展或实现ActionInvocation
的类的对象的引用,即该对象的实际类可以是ActionInvocation
的子类/实现。
其背后的概念称为多态性:某个类的对象也是其超类的对象,并且/或者可以通过已实现的接口进行引用。
一个例子:
假设您有一个像这样的对象:
Integer someInt = new Integer(1);
您可以将
someInt
作为参数传递给以下方法:void doSomething( Integer i) { ... }
void doSomething( Number n) { ... }} //because Integer extends Number
void doSomething( Object o) { ... } //because all objects extend Object
void doSomething( Comparable c) { ...} //because Integer implements Comparable (note that I left out generics here for simplicity)
请注意,您也可以像其他对象一样将
null
作为对象传递,但是对于您而言,您应该放心地假定actionInvocation
绝不会为null(这很可能在API文档中进行了说明)。关于java - 我们可以使用类的引用来调用方法吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18231743/