我真的很困惑,我已經閱讀了關於這個主題的一些問題,而且我還沒有能夠明確指出一個接口可以做什麼,一個抽象類無法做到的事情。我發現很多關於抽象類和接口的問題,但回答我:抽象類可以完成一個接口可以做的所有事情嗎?
抽象類不能做什麼接口可以做什麼?
我要求我的Java類的情況下,但它是否適用於其他語言隨意刪除Java標籤(可能是C#?)。
編輯:我的理解是一個抽象類,可以做的事情的接口可以不要,但如果一個抽象類,可以做一切的接口可以做,那麼什麼是接口的意義呢? 「實現多個接口」是什麼意思?
我真的很困惑,我已經閱讀了關於這個主題的一些問題,而且我還沒有能夠明確指出一個接口可以做什麼,一個抽象類無法做到的事情。我發現很多關於抽象類和接口的問題,但回答我:抽象類可以完成一個接口可以做的所有事情嗎?
抽象類不能做什麼接口可以做什麼?
我要求我的Java類的情況下,但它是否適用於其他語言隨意刪除Java標籤(可能是C#?)。
編輯:我的理解是一個抽象類,可以做的事情的接口可以不要,但如果一個抽象類,可以做一切的接口可以做,那麼什麼是接口的意義呢? 「實現多個接口」是什麼意思?
不能從C#中的多個抽象類繼承,但可以實現多個接口。
我想這可能適用於Java的太
編輯:
不能從多個類繼承。如果您有一個名爲Clonable的抽象類和一個稱爲Disposable的抽象類,那麼您只能繼承其中一個類,並且您不得不決定您的類應該是哪個類的子類:
例如:
public abstract class Clonable
{
public abstract void Clone();
}
public abstract class Disposable
{
public abstract void Dispose();
}
// MyClass cannot be Disposable too, it is not allowed by the language
public class MyClass : Clonable
{
override void Clone()
{
}
}
請注意,這是允許您只能從一個類繼承的語言的設計決策。
如果您有接口另一方面,語言可以讓你同時實現
例如
public interface IClonable
{
void Clone();
}
public interface IDisposable
{
void Dispose();
}
public class MyClass : IClonable, IDisposable
{
void IClonable.Clone()
{
}
void IDisposable.Dispose()
{
}
}
這樣的接口不能做抽象類所做的事情。
這是因爲抽象類可以包含代碼 - 接口不能。但是任何給定的類只能有一個超類 - extends
- 與任何數量的接口相反 - implements
,所以如果你使用抽象類,你基本上將自己繪製在繼承樹的一個角落,因爲你的類只能擴展一個類。
此限制不適用於接口,允許一個類有許多用途取決於它實現了多少接口。
接口是不可實例化的類,它只包含子類可以繼承的方法。接口可以做的唯一事情(在java中)是一個類可以實現多個接口,而一個類只能擴展1個抽象類。
interfaces也可以用在代理中,抽象類可以'噸。這在各種框架中被廣泛使用。 – MeBigFatGuy 2011-03-24 00:39:54
你不能實例化一個抽象類嗎? – BigOmega 2011-03-24 01:38:32
您不能@Ryan,但您可以在抽象類中聲明構造函數,但從不在接口中聲明。 – 2011-03-24 08:49:25
博學多聞:
什麼是 「實現多個接口」 是什麼意思?
考慮:
public static interface Ifun extends Comparable<Ifun>, Serializable {}//or
public static class Cfun2 implements Comparable<Cfun>, Serializable
當類實現Ifun
,則:
Collections.sort
自動排序。這意味着對象可以有多個1接口。
+1:這也適用於java。 – 2011-03-24 00:27:55
我將如何從多個類繼承?你能提供一個代碼示例嗎?你是什麼意思:實現多個接口? – BigOmega 2011-03-24 01:37:12
我編輯了我的回覆。我只能真的給你一個在C#中的代碼示例,也許有人可以在Java中給予等效的,如果有幫助 – 2011-03-24 02:39:22