您的位置:首页 > 编程语言 > C#

关于C#中的抽象类、抽象方法和虚方法的探究

2016-02-18 12:24 381 查看
2016年的第一篇文章,容我先喷喷新年的情怀,..........,好了,喷的差不多了。

在面向对象中,我们需要对类进行横向和纵向的认识,不同的类有不同特色的成员,同时在不同类的继承中,子类获得父类的成员也是丰富多彩。

先概述:

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

测试结果



好了,细细琢磨吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: