在我努力理解Java/C#中的接口時會問這個問題。正如我的程序員朋友告訴我的,界面是理解最簡單的概念之一,但很難有效使用。任何人都希望downvote,請考慮引導我在正確的方向前downvoting(我不介意,只要我得到我所尋求的知識)。瞭解Java/C中的抽象和接口#
我明白界面是如何工作的,但對我來說這似乎有點模糊。
考慮一下:
public interface Drawable {
public void draw(Graphics g);
}
public class Line implements Drawable {
public void draw(Graphics g) {
. . . // do something---presumably, draw a line
}
. . . // other methods and variables
}
現在,做一些與此我還要做:
Drawable newObject= new line();
我有一個抽拉型,但我仍然需要創建該類的新對象,線。這就是說,糾正我,如果我錯了,我仍然在創造一個類,線的對象意味着;如果上述內容是爲了內存優化而完成的(我知道它與抽象內存相關的內容比較多),那麼編寫上面的代碼並不能幫助我節省內存。
我的問題是:如果類行具有在它實現的接口上指定的方法,爲什麼我不能只執行以下操作?
public class Line {
public void draw(Graphics g) {
. . . // do something---presumably, draw a line
}
. . . // other methods and variables
}
line newObject= new line();
畢竟,除了創建一個基類型之外,接口不做任何事情。我的新手的理解是:第二個將不需要接口,並減少代碼。
我可以採取同樣的方法,併爲抽象類說同樣的事情,因爲你仍然必須提供具有重寫方法的具體子類。我的問題就是,爲什麼不在不需要抽象類的情況下聲明和創建具體對象。
我相信我在這裏錯過了一些東西。什麼使界面如此有用?對於我來說,只是在實際的事情由實際的課程完成時才添加更多的代碼。任何人都可以照顧解釋嗎?
您是否閱讀過[接口上的Java教程](http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html),整個「界面定義合同」的東西?這對你沒有用處? – Joni
我親愛的Joni(很高興見到你的評論)。是的我有,但仍然逃避我。 –
[Interface vs Base class]的可能重複(http://stackoverflow.com/questions/56867/interface-vs-base-class) –