說我有一個接口I
與方法doIt();
實例化界面
現在我有一個類C
實現I
並因此提供了在班doIt();
對於以下代碼的執行Hello
public class Hello{
I i = new I();
i.doIt();
}
1.)現在從哪裏開始執行doIt()?
2.)如果還有另一個類HelloWorld
實施I
如果doIt()
函數的實現不同也會如何。那麼它會採取哪些實施?
說我有一個接口I
與方法doIt();
實例化界面
現在我有一個類C
實現I
並因此提供了在班doIt();
對於以下代碼的執行Hello
public class Hello{
I i = new I();
i.doIt();
}
1.)現在從哪裏開始執行doIt()?
2.)如果還有另一個類HelloWorld
實施I
如果doIt()
函數的實現不同也會如何。那麼它會採取哪些實施?
嘗試編譯這些東西。您只能實例化一個Class
,它實現Interface
而不是直接Interface
。
Interface
就像Class
同意的合同,它implements
它;並且在Interface
的協議內,Class
提供了它的實現。
你不能實例化一個接口。你只能實例化一個具體的類。 doIt()
的實現是在實例化的具體類中定義的。如果該類不提供實現,則它將從超類繼承。
作爲旁註,在您的代碼示例中,您的代碼不包含在方法或靜態塊中。這不合法。您必須將代碼放在方法或靜態塊中。
接口無法實例化。您發佈的代碼應該是未編譯。你可以做的是這樣的:I c = new C();
。這也將確保我會調用doIt()
的適當實施。
有關Interfaces
的更多信息,請參閱this Oracle教程。
沒有實現,您的代碼將無法編譯。嘗試創建一個簡單的工作示例,你會明白。BTW語法錯誤無論如何:如果我是一個接口,你需要打開花括號來創建一個匿名類實現接口:
I i = new I() { public void doIt() {} };
在你的代碼I i = new I();
是不正確爲I
是interface
和接口不能被實例,如果你做那麼這應該是
I i = new I(){
public returntype doIt(){
...
}
};
現在上面的實現稱爲匿名內部類here
這行不通
public class Hello{
I i = new I(); // I is an interface, can't be instantiated
i.doIt();
}
我想你想......
public class A implements I {
public void doIt() {
System.out.println("A did it");
}
}
public class B implements I {
public void doIt() {
System.out.println("B did it");
}
}
public class Main {
public static void main(String args[]) {
I i = new A();
i.doIt();
i = new B();
i.doIt();
}
}
這將輸出
A did it
B did it
+1。例如。 – SiB 2012-08-02 05:55:24
只有這樣,各地的實例化界面添加匿名內部類型特定於您的實現。雖然它看起來像一個糟糕的設計有時候很有用。乾杯。
II i = new II() {
@Override
public void doit() {
// TODO Auto-generated method stub
}
};
你試過編譯這個....編譯器可能有東西要告訴你:) – 2012-08-02 05:37:15