c#简单使用抽象类(第一次随笔)

//第一次写随笔,c#我也才入门,想把自己理解到的东西写下来,以后回过来看的时候可能也觉得自己当时挺白痴的。也请大家帮忙指出不足之处。


//比如写一个动物叫的方法,鸭子嘎嘎的叫,马儿萌萌的叫,我们就需要抽象出一个动物类,在动物类里面写一个抽象方法,然后在子类里面重写父类的方法。
 1  abstract class  Animal  //抽象出来的父类
 2     {
 3         private string _name;  //字段的作用是存储数据
 4 
 5         public string Name  //属性的作用是保护字段,与外界打交流都是通过属性,属性其实也是两个方法,通过set方法进行存值,通过get方法进行取值
 6         {
 7             get { return _name; }
 8             set { _name = value; }
 9         }
10 
11         private int _age;
12 
13         public int Age
14         {
15             get { return _age; }
16             set { _age = value; }
17         }
18         public void eat()  //动物吃的方法都是一样的,在父类写了,在子类可以直接调用
19         {
20             Console.WriteLine("动物吃的方法");
21         }
22         public abstract void SayHello();  //写一个动物打招呼的抽象方法
23         public abstract void Call();  //动物叫的抽象方法
24        
25     }
//Duck类
 1 class Duck:Animal  //鸭子类,继承于动物类
 2     {
 3         
 4         public Duck(string name,int age)   //继承了父类的属性,在Duck类的构造函数中对属性赋值,会执行属性的set()方法。
 5         {
 6             Name = name;
 7             Age = age;
 8         }
 9         public override void SayHello()  //重写父类的SayHello()方法
10         {
11             Console.WriteLine("我叫{0},今年{1}岁",Name,Age);
12         }
13         public override void Call()   //重新父类的Call()方法
14         {
15             Console.WriteLine("鸭子嘎嘎的叫");
16         }
17     }

//Horse类

 1 class Horse:Animal  //Horse类,继承于动物类
 2     {
 3         
 4         public Horse(string name,int age)  //构造函数,对属性进行初始化
 5         {
 6             Name = name;
 7             Age = age;
 8         }
 9         public override void SayHello()  //重写父类的SayHello()方法
10         {
11             Console.WriteLine("我叫{0},今年{1}岁",Name,Age);
12         }
13         public override void Call()   //重写父类的Call()方法
14         {
15             Console.WriteLine("马儿萌萌的叫");
16         }
17     }

//Program类

 1 class Program  //Program类
 2     {      
 3         public Program()  //Program类的构造函数
 4         {
 5 
 6         }
 7        
 8         static void Main(string[] args)  //Main()函数,程序的主入口
 9         {
10             Animal ani = new Duck("小鸭子",12);  //定义了一个名为ani的Animal类,里面装的对象是Duck,通过new关键字开辟空间,创建对象,执行构造函数,对对象进行初始化。。让ani可以表现出Duck类型,也就是实现多态
11             ani.eat();  //调用的是父类的eat()方法
12             ani.Call();  //其实还是调用父类的Call()方法,只不过ani里面装的是子类对象,所以调用父类的Call()方法时被子类的Call()方法重写了一遍,override在英文翻译就是覆盖,重写
13             ani.SayHello();
14             Console.ReadKey();  //暂停
15         }
16     }

 

 

 

 

 

posted @ 2020-07-17 12:39  LastRunRecord  阅读(219)  评论(0)    收藏  举报