“`” 答:

<strong>abstract class</strong>
abstract 声明抽象类抽象方法,一个类中有抽象方法,那么这个类就是抽象类了。所谓的抽象方法,就是不含主体(不提供实现方法),必须由继承者重写。因此,抽象类不可实例化,只能通过继承被子类重写。

 

<pre><code class=""language-csharp"" lang=""csharp"">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();
}
}
}
</code></pre>

输出:
奥迪
car
沪A 00000

<strong>interface</strong>
声明接口,只提供一些方法规约,不提供任何实现;不能用public、abstract等修饰,无字段、常量,无构造函数

 

<pre><code class=""language-csharp"" lang=""csharp"">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
public interface IBus
{
void getTypes();
}
public interface IPlane
{
void getfunc();
}
public class Car : IBus,IPlane
{

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();
}
}
}
</code></pre>

输出结果:
car
fly

<strong>两者区别</strong>

1.interface中不能有字段,而abstract class可以有;
2.interface中不能有public等修饰符,而abstract class 可以有。
3.interface 可以实现多继承

 

<pre><code> "“`

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.