关于C#中的抽象类、抽象方法和虚方法的探究
2016-02-18 12:24
381 查看
2016年的第一篇文章,容我先喷喷新年的情怀,..........,好了,喷的差不多了。
在面向对象中,我们需要对类进行横向和纵向的认识,不同的类有不同特色的成员,同时在不同类的继承中,子类获得父类的成员也是丰富多彩。
先概述:
1.抽象类
抽象类中不是所有的方法都是抽象方法,对于单纯抽象类而言,是限制类的实例化,可以没有抽象方法。甚至没有任何成员也没事。
2.抽象方法
抽象方法的目的是为了让派生类实现其方法,抽象的方法不实现,抽象方法没有方法体,没有大括号。包含抽象方法的类一定是抽象类,所以含有抽象方法(属性)是这个类是抽象类的充分非必要条件。
3.虚方法
虚方法是一种方法,不是抽象的,它有大括号,是实现的,子类可以重写,可以覆盖。虚方法是父类中不一定继承到子类中的,具体由子类决定,它与抽象方法不同,虚方法与一般的方法相比,可实现由子类选择是否继承。
上代码:
1.生命类 life
View Code
测试结果
好了,细细琢磨吧!
在面向对象中,我们需要对类进行横向和纵向的认识,不同的类有不同特色的成员,同时在不同类的继承中,子类获得父类的成员也是丰富多彩。
先概述:
1.抽象类
抽象类中不是所有的方法都是抽象方法,对于单纯抽象类而言,是限制类的实例化,可以没有抽象方法。甚至没有任何成员也没事。
2.抽象方法
抽象方法的目的是为了让派生类实现其方法,抽象的方法不实现,抽象方法没有方法体,没有大括号。包含抽象方法的类一定是抽象类,所以含有抽象方法(属性)是这个类是抽象类的充分非必要条件。
3.虚方法
虚方法是一种方法,不是抽象的,它有大括号,是实现的,子类可以重写,可以覆盖。虚方法是父类中不一定继承到子类中的,具体由子类决定,它与抽象方法不同,虚方法与一般的方法相比,可实现由子类选择是否继承。
上代码:
1.生命类 life
//覆盖不会改变父类的方法 重写会改变父类的方法 当以子类创建父类的时候会体现出来 class Program { static void Main(string[] args) { people p1 =new people(); life被构造 animal被构造 people被构造 // life s1 = new life(); 作为abstract的抽象类不能被声明 animal liv1 = new animal(); //life被构造 animal被构造 animal p2 = new people(); //父类调用子类对象 liv1.death(); //输出animal 中的 liv1.huozhe(); //输出animal 中的 liv1.live(); //输出animal 中的 liv1.birth(); //输出animal 中的 Console.WriteLine("---------------------"); people p1 = new people(); p1.death(); //输出people 中的 p1.huozhe(); //输出people 中的 p1.live(); //输出继承animal 中的 //由于没有重写 p1.birth(); //输出people 中的 Console.WriteLine("---------------------"); liv1.death(); //输出animal 中的 liv1.huozhe(); //输出animal 中的 liv1.live(); //输出animal 中的 liv1.birth(); //输出animal 中的 Console.WriteLine("---------------------"); p2.death();//输出people 中的 p2.huozhe();//输出animal 中的 p2.live();//输出animal 中的 p2.birth();//输出animal中的 Console.WriteLine("-----------------------"); Console.WriteLine("---------转换----------"); // people p3 = new animal(); //出错子类引用不能直接引用父类对象, 除非将父类对象的数据类型强制转换成子类 // people p4 = (people)liv1; // 如果你创建实例的时候没有将父类引用到子类对象,是无法转换的 // p2.shuo(); //错误,引用不了, 父类引用自雷对象时无法子类中的新方法 people p5 = (people)p2; //这样转后,能调用 子类中的新方法,说明父类引用时没用丢到子类中的新方法,只是不能调用 p5.shuo(); Console.ReadKey(); } }
View Code
测试结果
好了,细细琢磨吧!
相关文章推荐
- C#的闭包
- c# josn 数据读取
- C# webbrowser 修改useragent
- C#中Uri类的解释
- CLR via C# 学习计划
- C#中的值类型和引用类型
- C#读取ini文件的方法
- C#绑定快捷键
- 从0自学C#06--多窗体共用对象
- C#设计模式09-装饰模式
- C#.net winfrom操作txt文件
- 生成一个“每小时变化一次的”用户名
- WinForm实现简单的拖拽功能(C#)(2)
- WinForm实现简单的拖拽功能(C#)
- 如何使用C#从word文档中提取图片
- 剖析设计模式编程中C#对于组合模式的运用
- C#XML生成与解析
- C#文件操作的两种方式
- C# 文件操作
- C#中的内存分配