首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:接口引用?

Java:接口引用?
EN

Stack Overflow用户
提问于 2014-04-03 20:08:29
回答 4查看 9K关注 0票数 0

我们都知道,您不能(至少直接)用Java实例化接口。

但是像这样的事情:

代码语言:javascript
复制
public class Test{
    public interface Link {
      void mySamplemethod();
      String myString ="HELLO!";
     }

     public static void main(String []args){

        Link b;

     }
}

到底是什么 b..。它怎么可能有实际的用途呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-03 20:10:22

b是一个类型为Link的变量,它没有值,甚至没有null。为了有实际用途,您必须使用对象引用初始化它,该对象引用的类实现了Link接口。

如果要用非null值初始化null,则应创建实现此接口的类。这在Java中是强制性的。如果不想在该类之外创建一个新类,可以在类内或方法内创建一个新类(这将是一个匿名类)。这是一个样本:

代码语言:javascript
复制
public static void main(String []args){
    Link b = new Link() {
        @Override
        public void mySampleMethod() {
            System.out.println("hello");
        }
    };
    b.mySampleMethod();
}

在这里已经很好地解释了使用接口进行编程而不是直接类的目的:“编程到接口”是什么意思? (不需要重新发明轮子)。

票数 5
EN

Stack Overflow用户

发布于 2014-04-03 20:13:18

您可以创建一个对接口的引用--只是不能实例化它。比方说,您有一个接口A

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

现在,您有了另一个实现此接口的类。

代码语言:javascript
复制
public class B implements A {
    public void someMethod() { // do something }
    public void someOtherMethod() { // do something else }
}

现在你可以有这样的

代码语言:javascript
复制
A a = new B();

当引用类型A实际上实现了B中定义的方法时,对象类型是B。引用类型A表示它只能访问由A指定的B中的方法,而没有其他任何方法(在本例中,它可以访问someMethod()而不是someOtherMethod())。

票数 2
EN

Stack Overflow用户

发布于 2014-04-03 20:11:03

B到底是什么。

b包含对实现Link的类的实例的引用。当然,引用可以是null

它怎么可能有实际的用途呢?

它的实际用途与任何其他Java引用几乎相同。

当然,代码本身并没有真正将b用于任何用途。然而,不难想象会有类似的代码(您需要有一个实现Link的类,并创建该类的实例)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22847942

复制
相关文章

相似问题

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