程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 面向對象——繼承,

C# 面向對象——繼承,

編輯:C#入門知識

C# 面向對象——繼承,


繼承:代碼文字結合理解

class Program
    {
        static void Main(string[] args)
        {
            //Student s = new Student();

            //Driver d = new Driver();
            Student s = new Student("學生", 18, '男', 101);
        }
    }

    /// <summary>
    /// 父類——人類
    /// </summary>
    public class Person
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _age;

        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        private char _gender;

        public char Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }

        public void CHLSS()
        {
            Console.WriteLine("吃喝拉撒睡");
        }



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

        public Person()
        {

        }
    }

    /// <summary>
    /// 子類——學生
    /// </summary>
    public class Student : Person
    {

        public Student(string name, int age, char gender, int id)
            : base(name, age, gender)
        {
            //this.Name = name;
            //this.Age = age;
            //this.Gender = gender;
            this.Id = id;
        }


        private int _id;

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }



        public void Study()
        {
            Console.WriteLine("學生會學習");
        }
    }

    /// <summary>
    /// 子類——老師
    /// </summary>
    public class Teacher :Person
    {

        public Teacher(string name, int age, char gender, double salary)
            : base(name, age, gender)
        {
            this.Salary = salary;
        }

        private double _salary;
        public double Salary
        {
            get { return _salary; }
            set { _salary = value; }
        }
        public void Teach()
        {
            Console.WriteLine("老師會講課");
        }
    }

    /// <summary>
    /// 子類——司機
    /// </summary>
    public class Driver:Person
    {

        public Driver(string name, int age, char gender, int driveTime)
            : base(name, age, gender)
        {
            this.DirveTime = driveTime;
        }


        private int _dirveTime;
        public int DirveTime
        {
            get { return _dirveTime; }
            set { _dirveTime = value; }
        }
        public void Drive()
        {
            Console.WriteLine("司機會開車");
        }
    }

我們可能會在一些類中,寫一些重復的成員,我們可以將這些重復的成員,
單獨的封裝到一個類中,作為這些類的父類。
Student、Teacher、Driver 子類 或 派生類
Person 父類  或  基類
問題:子類繼承了父類,那麼子類從父類那裡繼承過來了什麼?
首先,子類繼承了父類的屬性和方法,但是子類並沒有繼承父類的私有字段。
問題:子類有沒有繼承父類的構造函數?
答:子類並沒有繼承父類的構造函數,但是。子類會默認的調用父類無參數的構造函數,
創建父類對象,子類可以使用父類中的成員。
所以,如果在父類中重新寫了一個有參數的構造函數之後,那個無參數的就被干掉了,
子類就調用不到了,所以子類會報錯。
解決辦法:
1)、在父類中重新寫一個無參數的構造函數。
2)、在子類中顯示的調用父類的構造函數,使用關鍵字:base()

 注意:子類對象可以調用父類中的成員,但是父類對象永遠都只能調用自己的成員。

裡氏轉換
1)、子類可以賦值給父類
2)、如果父類中裝的是子類對象,那麼可以講這個父類強轉為子類對象。

 

is:表示類型轉換,如果能夠轉換成功,則返回一個true,否則返回一個false
as:表示類型轉換,如果能夠轉換則返回對應的對象,否則返回一個null

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved