虚方法和多态
程序员文章站
2022-03-28 16:26:55
以上是虚方法和多态。 面向对象编程过程中尽量依赖抽象的类,而不要过分依赖具体类。 基类的引用可以指向派生类。通过指向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); } }