abstract 與interface區別
一、abstract class
abstract 宣告抽象類抽象方法,一個類中有抽象方法,那麼這個類就是抽象類了。所謂的抽象方法,就是不含主體(不提供實現方法),必須由繼承者重寫。因此,抽象類不可例項化,只能通過繼承被子類重寫。
例項程式碼:
-
using System;
-
using System.Collections.Generic;
-
using System.Linq;
-
using System.Text;
-
using System.Threading.Tasks;
-
namespace ConsoleApplication1
-
{
-
public abstract class Bus
-
{
-
public abstract void getName();
-
public virtual void getTypes()
-
{
-
Console.WriteLine("bus");
-
}
-
public void getID()//一般方法,若在派生類中重寫,須使用new關鍵字
-
{
-
Console.WriteLine("滬A 00000");
-
}
-
}
-
public class car : Bus
-
{
-
public override void getName()
-
{
-
Console.WriteLine("奧迪");
-
}
-
public override void getTypes()
-
{
-
Console.WriteLine("car");
-
}
-
}
-
class Program
-
{
-
static void Main(string[] args)
-
{
-
car mycar = new car();
-
mycar.getName();
-
mycar.getTypes();
-
mycar.getID();
-
}
-
}
-
}
輸出:
奧迪
car
滬A 00000
二 interface
宣告介面,只提供一些方法規約,不提供任何實現;不能用public、abstract等修飾,無欄位、常量,無建構函式。
示例程式碼:
-
using System;
-
using System.Collections.Generic;
-
using System.Linq;
-
using System.Text;
-
using System.Threading.Tasks;
-
namespace ConsoleApplication1
-
{
-
public interface Bus
-
{
-
void getTypes();
-
}
-
public interface plane
-
{
-
void getfunc();
-
}
-
public class car : Bus
-
{
-
public void getTypes()
-
{
-
Console.WriteLine("car");
-
}
-
public void getfunc()
-
{
-
Console.WriteLine("fly");
-
}
-
}
-
class Program
-
{
-
static void Main(string[] args)
-
{
-
car mycar = new car();
-
mycar.getTypes();
-
mycar.getfunc();
-
}
-
}
-
}
輸出結果:
car
fly
三、區別
1.interface中不能有欄位,而abstract class可以有;
2.interface中不能有public等修飾符,而abstract class 可以有。
3.interface 可以實現多繼承