Csharp多態的實現(虛方法)


1.什么是抽象類

1.1虛方法是用virtual修飾,在子類中用override進行重寫

1.2虛方法是一個方法,放在類里面(可以再下面的代碼中看到)

1.3虛方法可以 重寫,也可以不重寫(這個可以再下面的代碼中看到)

2.多態的實現

2.1什么都不說了,直接上代碼,然后我在解釋吧

//先在命名空間下定義一個類,類里面放虛方法
 class Person
    {
        //類是指具有統一特征和行為的抽象,比如說電腦
        //對象是類的具體,比如說這個電腦,你眼前的這個電腦,具體的這個電腦
        //類中可以有字段,屬性和方法
        private string _name; //字段
        public string name//屬性
        {
            get
            {
                return _name;
            }
            set
            {
                _name = value;
            }
        }
        private float _height;
        public float height//屬性
        {
            get
            {
                return _height;
            }
            set
            {
                _height = value;
            }
        }
        private int  _age;
        public int age//屬性
        {
            get
            {
                return _age;
            }
            set
            {
                if(age<0)
                {
                    _age = 0;
                }
                _age = value;
            }
        }
        private char _sex;
        public char sex
        {
            get
            {
                return _sex;
            }
            set
            {
                if(sex == '女'||sex == '男')
                    _sex = value;
                else 
                    _sex = '男';
            }

        }
     
        public  virtual void say()//虛方法
        {
            Console.WriteLine("你好,我是一個人類,我叫{0}",_name);
        }

//在定義一個Teacher類,繼承Person,在子類中重寫虛方法
 class Teacher:Person
    {
         private string _address;
         public string address//在子類中新增加的屬性
         {
             get
             {
                 return _address;
             }
             set
             {
                 _address = value;
             }
         }
        public override void say()//虛方法重寫
        {
           Console.WriteLine("我是一個老師,我叫{0}",name);
        }

//在定義一個Student類,繼承Person,在子類中重寫虛方法
class Students:Person
    {
        private int _stuId;
        public int stuId
        {
            get
            {
                return _stuId;
            }
            set
            {
                _stuId = value; 
            }
        }
      //  public  override void say() //虛方法可以重寫,也可以不重寫
      //  {
       //     Console.WriteLine("大家好,我是一名學生,我叫{0}",name);
       // }
    }

2.2接下面來看看上面的代碼,至於具體的語法這里就不細說了,都是基礎的,今天主要看一下虛方法實現多態, 定義一個父類變量Person  p= new Students();     p = new Teacher(); 

在這里我們可以運行代碼看到,Person的對象p可以表現出Students類的特征或者Teacher的一些特征,這就是多態,子類表現出不同的形態.

2.2.1 使用多態的時候,系統先檢測父類中的方法是否有virtual關鍵字,即檢查是否重寫,如果沒有重寫直接調用父類中的方法,如果重寫了,就會轉到相應的子類中調用重寫的方法

2.2.2 在子類中新添加的屬性,方法等,在用虛方法實現多態的時候,是調用不到的, 對於這個個人是這樣理解的,因為子類是繼承與父類的,所以子類里面的一些屬性,父類里面是不存的,這樣的話,在創建出子類對象然后轉化為父類的時候,一些屬性就用不了了

2.2.3 父類里面先裝了學生類,然后然后又裝了老師類,  裝了那個類的對象,父類就會表現是那個類的特征,從而實現多態

Csharp多態的實現概述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM