C#抽象方法/抽象类


一、抽象类抽象方法有什么用?

其实不是说抽象类有什么用,一般类确实也能满足应用,但是现实中确实有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同,所以没有必要再父类里写。当然你也可以把抽象类都写成非抽象类,但是这样没有必要。

而写成抽象类,这样别人看到你的代码,或你看到别人的代码,你就会注意抽象方法,而知道这个方法是在子类中实现的,所以,有个提示作用

二、注意事项

  1. 当你想要写抽象类的时候,即想要在子类中实现基类中未定义的抽象方法时,要注意需要在父类方法的权限修饰符后跟 abstract,比如 public abstract void Eat(); 而在子类实现的同名方法中,加override ,比如public override void Eat(); 而且注意父类中的方法不能实现,只能声明,但是必须要在子类中按需实现

  2. 还需要注意,一个类中如果有一个抽象方法,那个这肯定是个抽象类,因此父类也要改为abstract,比如public abstract class Food{} ,然后子类继承 public class Apple:Food{}

  3. 抽象类不能够直接实例化对象,比如说不可以这样Food f = new Food();

  4. 抽象类中不一定全都是抽象方法,也可以包括普通方法

  5. 既然抽象类不能够直接实例化对象,那么如何访问普通方法呢,可以Food f1 = new Water(); f1.normalmethod();这样来进行访问

  6. 因为抽象方法要在子类中实现,所以抽象方法不能权限修饰符不能是private,不然子类中就无法实现了

简单代码如下

namespace learning {    //抽象类不能直接实例化对象,比如说不可以Food f = new Food();    public abstract class Food {        public abstract void Eat();        public void drink() {            Console.WriteLine("This is a normal method.");        }    }    public class Apple : Food {        //这里相当于重写了父类方法,会覆盖父类中的方法        //但是我们也可以在父类中把eat方法改为抽象方法,public abstract void eat()        //当父类中的方法变为抽象方法时,子类中继承的抽象方法就需要加override表示覆盖        //但是C#中还需要注意,父类中的抽象方法是不可以实现的,因此需要把父类中实现了的方法删除,仅留下声明        //还有,若一个类中包含了一个抽象方法,那么这个类,一定是个抽象类,因此也要改        //即:抽象方法只能够出现在抽象类中        public override void Eat() {            Console.WriteLine("HP + 10");        }    }    public class Water : Food {        public override void Eat()        {            Console.WriteLine("MP + 10"); ;        }    }    class Program    {        public static void Main(string[] args)        {            //这样写也可以            //Apple apple = new Apple();            //apple.Eat();            //下面的方式就是一种多态            Food f1 = new Apple();            Food f2 = new Water();            f1.Eat();            f2.Eat();            f1.drink();        }    } }

happysneaker.com

Unity那些事儿
请先登录后发表评论
  • 最新评论
  • 总共0条评论