个人观点:望牛人纠正,以求得进步
面向对象的三要素:
封装,继承,多态
多态实现方式又分三种:
虚方法,抽象类,接口
虚方法单独出现没有意义:在面向过程中,根本没有虚方法,但程序也照样出来了
所以说虚方法是一种思想:(只有在程序员眼里)
必须结合继承、里氏转换、重写、才能体现虚方法,而且这种体现只是在代码编写上,而不是实际的算法上有什么改进- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace 虚方法
- {
- public class Daddy
- {
- public virtual void Play()//虚方法
- {
- Console.WriteLine("Daddy");
- }
- }
- public class Son1 : Daddy
- {
- //public new void Play()//没有加override
- //{
- // Console.WriteLine("Son1");
- //}
- public void Play()//没有加override//这里为什么提示加new 不明白
- {
- Console.WriteLine("Son1");
- }
- public void Fun()
- {
- Console.WriteLine("Son1");
- }
- }
- public class Son2 : Daddy
- {
- public override void Play()
- {
- base.Play();
- }
- public void Fun()
- {
- Console.WriteLine("Son2");
- }
- }
- public class Son3 : Daddy
- {
- public override void Play()
- {
- Console.WriteLine("Son3");
- }
- public void Fun()
- {
- Console.WriteLine("Son3");
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Daddy dd = new Daddy();
- //子类可以赋值给父类
- Daddy dd1 = new Son1();
- Daddy dd2 = new Son2();
- Daddy dd3 = new Son3();
- dd.Play();
- Console.WriteLine("============");
- dd1.Play();
- dd2.Play();
- dd3.Play();
- Console.WriteLine("===========");
- Son1 ss1 = new Son1();
- Son2 ss2 = new Son2();
- Son3 ss3 = new Son3();
- ss1.Play();
- ss2.Play();
- ss3.Play();
- Console.WriteLine("==============");
- ss1.Fun();
- ss2.Fun();
- ss3.Fun();
- }
- }
- }
复制代码 下面列举代码:你自己看看吧 |