以上是虛方法和多態。 面向對象編程過程中儘量依賴抽象的類,而不要過分依賴具體類。 基類的引用可以指向派生類。通過指向Dog類的Pet類的引用,僅能訪問Dog中繼承自Pet的部分,如下: ...
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //Dog dog = new Dog(); 6 Pet dog = new Dog("DD");//創建指向派生類Dog的基類Pet的實例 7 //dog.Name = "DD"; 8 dog.Speak();//此處是調用Pet類的虛方法Speak(),根據dog所指向的派生類Dog而調用Dog里的同名重寫方法Speak()---即多態 9 //Cat cat = new Cat(); 10 Pet cat = new Cat("CC");//創建指向派生類Cat的基類Pet的實例 11 //cat.Name = "CC"; 12 cat.Speak();//此處是調用Pet類的虛方法Speak(),根據cat所指向的派生類Cat而調用Cat里的同名重寫方法Speak()---即多態 13 14 15 } 16 17 } 18 public class Pet 19 { 20 public string Name; 21 public void PrintName() 22 { 23 Console.WriteLine("Print"+Name); 24 } 25 26 virtual public void Speak()//聲明瞭virtual的方法就是虛方法,可在派生類中override重寫 27 { 28 Console.WriteLine("I'm "+Name); 29 } 30 } 31 public class Dog : Pet 32 { 33 public Dog(string name)//構造函數 34 { 35 Name = name; 36 } 37 new public void PrintName() 38 { 39 Console.WriteLine("子列印"+Name); 40 } 41 override public void Speak()//重寫基類Pet的虛方法 42 { 43 Console.WriteLine("子說" + Name); 44 } 45 } 46 public class Cat : Pet 47 { 48 public Cat(string name)//構造函數 49 { 50 Name = name; 51 } 52 new public void PrintName() 53 { 54 Console.WriteLine("子列印" + Name); 55 } 56 override public void Speak()//重寫基類Pet的虛方法 57 { 58 Console.WriteLine("子說" + Name); 59 } 60 }
以上是虛方法和多態。
面向對象編程過程中儘量依賴抽象的類,而不要過分依賴具體類。
基類的引用可以指向派生類。通過指向Dog類的Pet類的引用,僅能訪問Dog中繼承自Pet的部分,如下:
class Program { static void Main(string[] args) { Pet dog = new Dog("DD");//創建指向派生類Dog的基類Pet的實例,前面的Pet的位置 決定了下麵引用的方法取自哪個類。 dog.PrintName(); Pet cat = new Cat("CC");//創建指向派生類Cat的基類Pet的實例 cat.PrintName();//指向派生類Cat的對Pet的引用,訪問的是Catl里繼承自Pet的方法---基類的引用 } } public class Pet { public string Name; public void PrintName() { Console.WriteLine("Print"+Name); } } public class Dog : Pet { public Dog(string name)//構造函數 { Name = name; } new public void PrintName() { Console.WriteLine("子列印"+Name); } } public class Cat : Pet { public Cat(string name)//構造函數 { Name = name; } new public void PrintName() { Console.WriteLine("子列印" + Name); } }