抽象類實現多態


 

  

一:什么是多態?

      多種形態,既不同的對象對於同一個操作做出的相應不同。

 

二:.抽象類的幾個注意事項

     1,抽象類使用abstract修飾

     2,抽象方法只能位於抽象類中

     3,抽象類不能實例化

     4,抽象方法沒有方法體

      5,抽象類不能是靜態類或者密封類

      6,子類必須重寫父類的所有抽象方法,除非子類也是抽象類

      7,抽象類中可以有普通的方法

      8,抽象了中可以有構造函數

      9,抽象類中的抽象方法就是為了約束子類的方法形式。

 

 三:抽象類的“實例化”

      雖然抽象類本身不能通過new進行實例化,但他可以將引用對象指向子類的真實對象,也可以稱為間接實例化。

      Person作為父類

public abstract class Person{

public int Age { get; set; }

public string Name { get; set; }


public Person(int age,string name) {

this.Age = age;
this.Name = name;

}

public abstract void Say();

public void Eat()
{

Console.WriteLine("我是父類");
}

}

  Student類去繼承Person

   

public class Student:Person
{


    public Student(string name,int age){

                 public Student(int age, string name):base(age,name) {

                 this.Age = age;
                 this.Name = name;


                 }


                  public override void Say()
               {
               Console.WriteLine("子類說話");
                 }


public void Eat() {

Console.WriteLine("我是子類");

}

   }
}

  父類對象指向子類的真實對象時,子類首先走的是父類的構造函數,在走子類的構造函數,給其屬性賦值。,

 

Person p = new Student(18, "張宇");

            p.Say();                  //只有這一種情況,父類變量指向子類對象,調用的是子類的方法,
                                      //符合多態,父類和子類方法同名調用的是子類的方法
            p.Eat();                  //如果沒有方法沒有發生關系,則默認調用父類的方法。
                 
             

            Student stu = (Student)p;

            stu.Eat();                //如果要調用子類的特有的方法,需要進行類型轉換,在java中稱為,向下轉型
            

            Console.ReadKey();

  

 


免責聲明!

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



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