为什么当我单击implement时,接口中列出的变量没有出现在类中?我看了看,我没有看到我真正想要的答案,还是变量更像一个属性?
类:
public class TestInterface implements myInterable {
public TestInterface() {
}
public static void main(String[] args) {
}
@Override
public void method1() {
}
@Override
public void method2() {
}
}
interface myInterable {
public int score = 0;
public void method1();
public abstract void method2();
}尝试过此代码,但无法工作。它与列出的Oracle教程中的示例几乎完全一样。
示例:
interface TimeClient {
void setTime(int hour, int minute, int second);
void setDate(int day, int month, int year);
void setDateAndTime(int day, int month, int year, int hour, int minute, int second);
void getLocalDateTime();
public static String getZoneId (String zoneString) { <-- Tutorial example
return "";
}
public default int getZonedDateTime(String zoneString) { <-- like the tutorial
return 0;
}
}另一个例子是:
Oracle声明您不能创建接口的实例,但是如果您的类实现和接口比您可以通过创建对类的新引用来创建接口实例?你会这样看待这个。这是一种创建类实例的更好方法吗?方法是使用接口并将所有的方法存根放在接口中,然后添加一个新的接口方法,而不必因为一个或两个新方法而重写所有代码。
如果这是正确的,并且我想向我的例如我的应用程序中添加一个新的方法,那么如果我的变量使用这种类型的实例创建,我就不必遍历并重新编译每个类来添加一个新方法。
public class TestInterface implements myInterable,
Runnable,
MouseListener {
//Code goes here
}
public myInterable uu = new TestInterface(); <--This is the interface class不起作用的例子。
如果我用类变量名创建接口实例,这是否有效。
public class TestInterface implements myInterable,
Runnable,
MouseListener {
public myInterable uu = new TestInterface();
public TestInterface() {
}
public void method1() {
}
public void method2() {
}
public void run() {
System.out.println("Runnable");
}
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
TestInterface b = new TestInterface();
b.run();
b.uu.run();
}
}
interface myInterable {
public int score = 0;
public void method1();
public abstract void method2();
public abstract void run();
// void method3() {
// int index = 0;
// for (index = 0; index < 10; index++) {
// }
// }
}错误信息:
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)
at DDHIntefaceExample.TestInterface.<init>(TestInterface.java:10)发布于 2014-01-21 02:36:50
让人费解的是,您的myInterable应该是MyInterable,遵循典型的Java大写惯例。
接口中的所有方法本质上都是public abstract (而且您不能定义static方法)。不过,Java 8可能会改变这一点。
接口中的所有变量本质上都是public static final。
有关更多详细信息,请参见关于接口的Java教程
所以你的
interface MyInterable {
public int score = 0;
public void method1();
public abstract void method2();
}是相同的
interface MyInterable {
public static final int score = 0;
public void method1();
public void method2();
},并且也与
interface MyInterable {
int score = 0;
void method1();
void method2();
}发布于 2014-01-21 02:18:07
The JLS状态
接口主体中的每个字段声明都是隐式的
public、static和final。允许冗余地为这些字段指定任何或所有这些修饰符。
因此,示例中的字段score不是继承的,因为它是static。
发布于 2014-01-21 02:18:30
只能在接口中定义常量或静态变量,而不能定义实例变量。如果要定义实例变量,为什么不使用抽象类并提供getter和setter,并将实例变量设置为私有?
https://stackoverflow.com/questions/21247902
复制相似问题