C#

C#高级进阶-[构造/继承]方法

2018-03-12  本文已影响17人  xzhuan

Aitin原创稿件,转载请注明出处!

C#语法进阶 <构造/继承>方法
* 继承语法
优点:
   1.复用代码的一种方式
   2.统一概念 概念的复用
   3.以层次化方式管理类
狗=动物
猫=动物
   缺点:
   4.耦合度高 父类的改变直接影响所有子类,不需要通知子类
   建议:继承层次不要太深,三层即可
   尽量选择抽象类来继承
   
   继承的特点:
   1.子类拥有父类中所有非私有成员
   2.构造方法不继承
*/

* 构造函数
* 1.构造方法不会继承给子类
* 2.但是在创建子类对象时,自动调用父类的构造方法,且父类构造方法先执行 顺序: 子类进入→从基类→派生类→子类
* 3.什么时候调用构造方法 new()对象的时候<分配内存空间+调用构造方法>
* 4.当子类创建对象时,默认调用父 无参 构造函数<如果程序员 没写构造方法,编译器会生成一个无参构造方法> 
*     bug情况: 如果程序员写了带参的构造方法,编译器不会自动生成无参构造方法 ,调用时使用了无参构造函数 则报错
*     解决方法:
*     4.1 给父类添加 无参构造函数
*     4.2 在子类方法中用base关键字指明要调用父类的哪一个无参构造方法    public Dog(int id) : base(id)  { }
* 5.构造方法是创建对象的唯一通道
*     5.1 分配内存空间
*     5.2 初始化对象  对象属性
*/
namespace LearnDemo20180302
{
   #region  继承
   //class Program
   //{
   //    //调用端
   //    static void Main(string[] args)
   //    {
   //        //写法1
   //        Animal ani1 = new Animal();
   //        ani1.Walk();

   //        //写法2
   //        Dog dog = new Dog();
   //        dog.Walk();

   //        //写法3
   //        //Dog dog = new Dog();
   //        //Animal ani2 = dog;
   //        Animal ani2 = new Dog();     //复用概念
   //        ani2.Walk();
   //        Console.ReadLine();
   //    }

   //}
   //class Dog : Animal
   //{

   //}
   ////定义端
   //class Animal : Learn0
   //{
   //    public Animal()
   //    {
   //        Console.WriteLine("Animal");
   //    }
   //    public void Walk()
   //    {

   //    }
   //}
   //class Learn0
   //{
   //    public Learn0()
   //    {
   //        Console.WriteLine("Learn0");
   //    }
   //}
   #endregion

   #region  带参构造函数
   class Program
   {
       //调用端
       static void Main(string[] args)
       {
           //写法1
           Animal ani1 = new Animal(888);
           ani1.Walk();

           //写法2
           Dog dog = new Dog(888);
           dog.Walk();

           //写法3
           //Dog dog = new Dog();
           //Animal ani2 = dog;
           Animal ani2 = new Dog(888);     //复用概念
           ani2.Walk();
           Console.ReadLine();
       }

   }
   class Dog : Animal
   {
       public Dog(int id) : base(id)  //指明要调用的 带一个参数的构造函数
       {
       }
   }
   //定义端
   class Animal : Learn0
   {
       int id;
       //public Animal()
       //{
       //}
       public Animal(int id) : base(id)
       {
           this.id = id;
       }
       public void Walk()
       {

       }
   }
   class Learn0
   {
       public Learn0(int id)
       {
           Console.WriteLine(id);
       }
   }
   #endregion
}
上一篇下一篇

猜你喜欢

热点阅读