C#多态实现之抽象类

示例:

控制台应用程序中,“Program.cs”类文件中源码:

定义抽象类关键字:abstract

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _02抽象方法实现多态
{
    //3种方法实现多态之抽象类
    //virtual,子类重写父类中的方法。
    //abstract,子类重写父类中的方法。
    //接口,实现接口的类,将接口中的方法实现。

    //做网站的公司(抽象类)  你给我活我去开发网站,但是网站需要一部分flash,我公司力都是程序员(抽象类中有实现的方法)。
    //没人会做flash(抽象方法),于是我把做flash这部分工作给其它公司去做(重写抽象方法的类)

    //多态性的含义:使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。
    //多态的作用:把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。(多态)

    //如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,采用虚方法来实现多态;
    //如果父类中没有默认实现,父类也不需要被实例化,则可将该类定义为抽象类。

    //主程序
    class Program
    {
        static void Main(string[] args)
        {
            Chinese cn = new Chinese();
            cn.Show();
            Console.ReadKey();

            //**抽象类是不能被实例化的。(抽象类的作用就是为了让继承。)**
            //Person p = new Person();
        }
    }


    //1.这个类也必须标记为abstract(抽象)的。
    //2.抽象成员必须写在抽象类中。不能写在一个实例中。
    //3.抽象类中一定有构造函数。虽然不能被实例化
    public abstract class Person
    {
        //4.在抽象类中可以包含实例化成员
        public string Name
        {
            get;
            set;
        }

        //5.可以包含抽象方法、属性、索引器、事件。【这几个最终都是方法】
        //6.Age为抽象属性,没有任何实现,区别于自动属性Name
        public abstract int Age
        {
            get;
            set;
        }

        public void SayHi()
        {
            Console.WriteLine("我不抽象....");
        }
        //7.抽象方法不能有任何方法体。(不能有任何实现 {这里面的内容} )
        //8.抽象成员不能是private
        public abstract void Show();
        //{
        //}
    }

    public class Chinese : Person
    {
        //9.父类中的抽象成员,子类继承以后必须重写所有抽象成员(例外:除非子类也是一个抽象类。)
        public override int Age
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public override void Show()
        {
            Console.WriteLine("我是中国人!!");
        }
    }

    public abstract class Japanese : Person
    {
        //抽象类中,可以不对父类的抽象方法、抽象属性进行重写
    }
}

输出结果如下:





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值