天天看點

C#基礎-036 類的繼承

父類:

class Animal
    {
        private string name;
        private int age;
        private char gender;

        //公有的屬性是可以被繼承的
        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }

        public int Age
        {
            get
            {
                return age;
            }

            set
            {
                age = value;
            }
        }

        public char Gender
        {
            get
            {
                return gender;
            }

            set
            {
                gender = value;
            }
        }

        //子類在繼承父類的時候 父類中的無參構造一定要顯示的寫出來   因為在執行個體化子類的時候  
        //在父類中為什麼要顯示的寫出來無參構造?
        //在類中如果出現了構造方法  那麼就會把隐式的無參構造給覆寫掉

        public Animal()
        {

        }

        //構造方法是不能被繼承的
        //所有公有的方法是可以被繼承的  說法是錯誤的
        //因為構造方法不可以被繼承
        public Animal(string name, int age, char gender)
        {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }

        //公有的方法可以被繼承
        public override string ToString()
        {
            return string.Format("名字:{0},年齡{1},性别:{2}", Name, Age, Gender);
        }
    }
           

子類1:

//class  子類:父類{}  這樣就形成了繼承關系
    class Cat:Animal
    {
        public Cat()
        {

        }

        public Cat(string name)
        {
            this.Name = name;
        }
        //base  維系了父子類之間的繼承關系
        public Cat(string name, int age, char gender):base(name, age, gender)
        {

        }
    }
           

子類2:

class Dog:Animal
    {
        public Dog()//無參構造
        {

        }
        public Dog(string name, int age, char gender)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
        }
    }
           

主程測試:

static void Main(string[] args)
        {
            Animal[] animals = new Animal[];
            animals[] = new Dog("小黑",,'公');
            animals[] = new Cat("小白", , '母');
            animals[] = new Dog("小灰", , '母');
            animals[] = new Cat("小花", , '公');
            animals[] = new Dog("小純", , '母');
            for (int i = ; i < animals.Length; i++)
            {
                //is 關鍵字
                //is不會将對象直接進行轉化 會在轉化之前 進行一次判斷 如果類型比對則傳回true
                //類型不比對 則傳回false  然後需要根據傳回值進行适當操作
                bool ret = animals[i] is Dog;
                if (ret)
                {
                    ((Dog)animals[i]).Bark();
                }
                else
                {
                    ((Cat)animals[i]).Bark();
                }
                 //as 關鍵字
                //as 可以将animals[i]直接轉化 轉化成功  傳回一個Dog執行個體 否則傳回null
                //Dog dog = animals[i] as Dog;
                //if (dog != null)
                //{
                //    dog.Bark();
                //}
                //Cat cat = animals[i] as Cat;
                //if (cat != null)
                //{
                //    cat.Bark();
                //}
            }
        }