首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对调用Java接口方法的困惑

对调用Java接口方法的困惑
EN

Stack Overflow用户
提问于 2013-04-24 00:12:34
回答 4查看 81.6K关注 0票数 25

假设我有一个接口A,定义如下:

代码语言:javascript
复制
public interface A {
  public void a();
}

它包含名为void a();的方法

我有一个实现此接口的类,并且只有一个方法:

代码语言:javascript
复制
    public class AImpl implements A {
       @Override
       public void a() {
           System.out.println("Do something");
       }
    }

问:如果在主类中,我调用接口方法,它会调用属于实现接口的类的实现吗?

例如:

代码语言:javascript
复制
public static void main(String[] args){
  A aa;
  aa.a();
}

这个打印会“做点什么”吗?

EN

回答 4

Stack Overflow用户

发布于 2013-04-24 00:19:53

这取决于对象的运行时类型。请参见:

这是你的界面:

代码语言:javascript
复制
public interface A {
  public void a();
}

这是你们的班级:

代码语言:javascript
复制
public class AImpl implements A {
    public void a() {
       println("I am AImpl");
    }
}

还有另一个实现:

代码语言:javascript
复制
public class AnotherAImpl implements A {
    public void a() {
       println("I am another AImpl");
    }
}

所以看一下this main方法:

代码语言:javascript
复制
public static void main(String[] args){
  A aa;
  aa = new AImpl();
  aa.a(); // prints I am AImpl
  aa = new AnotherAImpl();
  aa.a(); // now it prints I am another AImpl
}
票数 25
EN

Stack Overflow用户

发布于 2013-04-24 00:14:03

您需要调用实际AImpl对象上的例程

代码语言:javascript
复制
A aa = new AImpl();
aa.a();

它在这里相当于如下所示

代码语言:javascript
复制
AImpl aa = new AImpl();
aa.a();

您的示例将引发一个错误,因为您试图在未初始化的对象上调用一个方法。

票数 2
EN

Stack Overflow用户

发布于 2013-04-24 00:16:22

您可能会通过自己运行代码来发现这一点。

当前您将获得一个NullPointerException,因为您还没有为变量aa赋值任何内容。将您的代码更改为以下代码将调用该方法并输出文本:

代码语言:javascript
复制
public static void main(String[] args){
    A aa = new AImpl();
    aa.a();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16174260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档