java中類與接口的實現關係

一個類可以繼承另一個類,一個類可以繼承一個接口嗎?

準確的說,類不是繼承(inherit)接口,而是實現(implement)接口。.NET 的語言中,類只能繼承自一個類,但是可以實現一個或多個接口。但是也有人認爲說類繼承接口也無傷大雅,但我個人認爲正確的用語可以加深概念理解的正確性。下面用一段代碼解釋繼承和實現的區別:
using System;
public interface ITest
{
}
public class BaseClass
{
}
public class SubClass : BaseClass, ITest
{
}
class AppEntry
{
 static void Main(string[] args)
 {
  Type intType = typeof(ITest);
  Type basType = typeof(BaseClass);
  Type subType = typeof(SubClass);
  Console.WriteLine(subType.IsSubclassOf(basType));  // 輸出 true,因爲 SubClass 是繼承自 BaseClass。
  Console.WriteLine(subType.IsSubclassOf(intType));  // 輸出 false,因爲 SubClass 是實現而不是繼承了 ITest(這個結果也說明繼承和實現是有區別的)。
  Console.WriteLine(basType.IsAssignableFrom(subType));  // 輸出 true,因爲 SubClass 是繼承自 BaseClass,所以可以將 SubClass 對象賦值給 BaseClass 的變量。
                // BaseClass b = new SubClass();
  Console.WriteLine(intType.IsAssignableFrom(subType));  // 輸出 true,因爲 SubClass 實現了 ITest 接口,所以可以將 SubClass 對象賦值給 ITest 的變量。
                // ITest it = new SubClass();
 }
}
注意:類型兼容性測試方法:

IsSubclassOf(Type t), 當前類是t的子類型,返回true。

IsAssignableFrom(Type t),當前類與t類型相同 | 當前類是t父類 | 當前類是t實現的接口,返回true。

IsAssignableFrom()用的多,因爲可判斷情況多。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章