抽象方法的问题
什么时候定义抽象方法,为什么定义成抽象的,怎么定义
------解决方案--------------------抽象方法就是把具体实现留给派生类,达到实现与意图的分离,其实也可以用接口来实现
------解决方案--------------------抽象方法用于对象不需要或不能够实现却要求子类必须实现的场景...
例如...人.说话()方法,你构造“人”这个类时无法确定“人”如何说话,只有它的子类才能实现,如中国人.说话(){讲中文;}...俄国人.说话(){讲俄文;}...
------解决方案--------------------关于什么时候定义抽象方法,楼主可以参考一下“模板方法模式”,我想你应该会从中得到启示。
------解决方案--------------------建议用接口.
总之我也说不清楚为什么,看网上好多人都这么写代码.
------解决方案--------------------
------解决方案--------------------当你定义一个基类,你想要求继承这个基类必须实现一个方法,而且你想在这个基类中使用这个方法时,那么这个方法可以定义成抽象方法。
接口只能要求继承这个接口实现方法,但因为它没有实现,所以他不能使用这个方法。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------有时候基类并不与具体的事物相联系,而是只表达一种抽象的概念,用以为它的派生类提供一个公共的界面,为此C#中引入了抽象类(abstract class)的概念。
对抽象类的使用有以下几点规定:
抽象类只能作为其它类的基类,它不能直接被实例化(不能使用new 操作符)
抽象类允许包含抽象成员,但这不是必须的;
抽象类不能同时又是密封的;
如果一个非抽象类从抽象类中派生,则其必须通过重写来实现所有继承而来的抽象成员
一个方法声明中如果加上abstract 修饰符我们称该方法为抽象方法(abstract method)。
如果一个方法被声明是抽象的,那么该方法默认也是一个虚方法。事实上抽象方法是一个新的虚方法,它不提供具体的方法实现代码
只能在抽象类中声明抽象方法
声明抽象方法只需要给出方法的原型
------解决方案--------------------写个简单的小例子
C# code
abstract class Animal
{
public string name;
public int age;
public void Move()
{
Console.WriteLine(“动物都是可以动滴!!!”);
}
public abstract void Sound(); //抽象方法
}
class Dog :Animal //继承
{
public int Legs=4;
public override void Sound()
{
Console.WriteLine(“狗狗叫:汪!汪!汪!”);
}
}
class Snake:Animal //继承
{
public override void Sound()
{
Console.WriteLine(“蛇发出丝~~丝~~的声音”);
}
}
class MyPet
{
static void Main()
{
//Animal MyAnimal=new Animal();错误的,抽象类不能实例化
Dog MyDog=new Dog();
Snake MySnake=new Snake();
MyDog.name=“小白”;
MyDog.age=5;
MyDog.Sound();
MySnake.name=“斯内普”;
MySnake.age=10;
MySnake.Sound();
}
}
------解决方案--------------------
抽象方法属于类,即当属于一类的时候用抽象类,例如卡车和小汽车都属于车,这是车类可以定义为抽象类,里面定义一些抽象方法供派生类实现。接口属于一种约束,当没有内部联系的时候,而是仅仅约束某个类要实现某种功能,这时候用接口。
------解决方案--------------------