我们都知道,您不能(至少直接)用Java实例化接口。
但是像这样的事情:
public class Test{
public interface Link {
void mySamplemethod();
String myString ="HELLO!";
}
public static void main(String []args){
Link b;
}
}到底是什么 b..。它怎么可能有实际的用途呢?
发布于 2014-04-03 20:10:22
b是一个类型为Link的变量,它没有值,甚至没有null。为了有实际用途,您必须使用对象引用初始化它,该对象引用的类实现了Link接口。
如果要用非null值初始化null,则应创建实现此接口的类。这在Java中是强制性的。如果不想在该类之外创建一个新类,可以在类内或方法内创建一个新类(这将是一个匿名类)。这是一个样本:
public static void main(String []args){
Link b = new Link() {
@Override
public void mySampleMethod() {
System.out.println("hello");
}
};
b.mySampleMethod();
}在这里已经很好地解释了使用接口进行编程而不是直接类的目的:“编程到接口”是什么意思? (不需要重新发明轮子)。
发布于 2014-04-03 20:13:18
您可以创建一个对接口的引用--只是不能实例化它。比方说,您有一个接口A
public interface A {
public void someMethod();
}现在,您有了另一个实现此接口的类。
public class B implements A {
public void someMethod() { // do something }
public void someOtherMethod() { // do something else }
}现在你可以有这样的
A a = new B();当引用类型A实际上实现了B中定义的方法时,对象类型是B。引用类型A表示它只能访问由A指定的B中的方法,而没有其他任何方法(在本例中,它可以访问someMethod()而不是someOtherMethod())。
发布于 2014-04-03 20:11:03
B到底是什么。
b包含对实现Link的类的实例的引用。当然,引用可以是null。
它怎么可能有实际的用途呢?
它的实际用途与任何其他Java引用几乎相同。
当然,代码本身并没有真正将b用于任何用途。然而,不难想象会有类似的代码(您需要有一个实现Link的类,并创建该类的实例)。
https://stackoverflow.com/questions/22847942
复制相似问题