抽象类

抽象类:abstract
就是用来被继承的,不能实例化对象,因为没有构造函数;
抽象方法,不能有方法的主体,只能定义方法的结构;

抽象类可以被子类继承,在子类中需要把方法主体写清楚,调用时直接实例化一下子类,直接调用子类中写的方法

抽象类虽然不能实例化,但可以实例化等于子类,如:抽象类名  a=new 子类名,这样就可以直接调用子类中的方法

抽象类中也可以写普通方法和虚方法,普通方法不可以在子类中重写,只能被继承,而虚方法可以在子类中被重写

抽象方法或抽象属性,只能存在于抽象类中;
抽象类中不一定只有抽象方法和抽象属性;

例:

创建一个项目,添加一个抽象类,再添加一个子类:

抽象类:

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

namespace 抽象类
{
    abstract class sport //创建一个项目,添加一个父类,class前面添加关键词abstract,就是一个抽象类
    {
        public abstract void sp();//添加使用方法时在访问修饰符的后面也加上abstract,不能有函数体

        public abstract void rt();//抽象类可以做为父类被继承,但因为抽象类中没有方法主体,
                                  //需要在子类中写清楚

        //在抽象类中也可以添加普通的使用放法
        public void paobu() 
        {
            Console.WriteLine("用腿跑步");//这样的方法就<不可以>在子类中被重写
        }

        //抽象类中也可以由虚方法,虚方法关键词virtual
        public virtual void chifan()
        {
            Console.WriteLine("用嘴吃饭");//虚方法可以在子类中进行重写
        }
    }
}

子类:

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

namespace 抽象类
{
    class swim:sport  //添加一个子类继承这个抽象类,因为抽象类中没有方法主体,需要在子类中写清楚
    {
        public override void sp() //添加时同样用重写关键词override;
        {
            Console.WriteLine("我喜欢运动");
        }
        public override void rt()
        {
            Console.WriteLine("我喜欢游泳");
        }

       
        public override void chifan()//在父类中这是一个虚方法,可以重写
        {
            Console.WriteLine("大口吃饭");
        }
    }
}

Program:

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

namespace 抽象类
{
    class Program
    {
        static void Main(string[] args)
        {
            sport cs = new sport(); //出现报错,抽象类,就是用来被继承的,不能实例化对象,因为没有构造函数;
            sport cs = new swim();//抽象类不能实例化对象,但是他可以new 他的子类swim
            cs.chifan();  // 这样调用的是它子类里面的方法
            cs.paobu();
            cs.rt();
            cs.sp();
            Console.WriteLine("=======================================");

            swim sw = new swim();//子类swim继承了sport这个抽象类,并且写了方法主体,就可以实例化使用
            sw.rt();//现在可以直接点出抽象类被继承后,在子类中写完主体的使用方法
            sw.sp();

            sw.paobu();//这是在抽象类中写的一个普通方法,不可以在子类中重写,直接被子类继承,可以直接点出使用
            sw.chifan();//这是在抽象类中写的一个虚方法,可以在子类中重写
            Console.ReadLine();
        }
    }
}

原文地址:https://www.cnblogs.com/zyg316/p/5598835.html