很多面试的时候经常问的问题,抽象类和接口的区别
具体的区别我也不是很清楚,我把我认为有道理的东西传授给你,希望能帮到你,
抽象类和接口区别不是很明显,除了多重继承外,感觉抽象类完全可以替代接口,个人感觉在于你要做什么用,抽象类为了代码复用性,接口为了实现多态性,你可以想一想你要用这两个的初衷是什么来决定
不过抽象类如下:
public abstract class Animal
{
public abstract string Name {get; set;}
public abstract void Show();
public void MakeVoice()
{
Console.WriteLine("hello, world!");
}
}
接口如下:
interface InterfaceStudent
{
void Method1();
void Method2(int age);
void Method3(string name, int age);
}
什么是虚函数,关键字还记得吗?virtual
虚函数和抽象函数的区别,继承时虚函数不需要被实现,抽象方法必须被实现
下面代码中不重写GetName也是对的,执行的是虚方法中的代码,重写之后实现的是重写之后的函数
虚方法特点:
虚方法前不允许有static,abstract,override 修饰符
虚方法不能是私有的,因此不能用private
虚方法(public virtual string GetName() )与 非虚方法(public string GetName())最大区别是:
虚方法可以被派生类实现,非虚方法不能
public class VirtualTest: VirtualSingle
{
//public override void GetName()
//{
// //base.GetName();
// Console.WriteLine("my name is winner again");
//}
public override void GetAge() ×××××××××××
{
Console.WriteLine("method is unavailable. ×××××××××××");
}
}
public class VirtualSingle
{
public virtual void GetName()
{
Console.WriteLine("my name is winner");
}
public void GetAge()
{
Console.WriteLine("my age is 18");
}
}
VirtualTest vt = new VirtualTest();
vt.GetName();