抽象类,抽象方法

<1>

抽象类中可以有实现的方法。抽象方法必须在抽象类中。

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

namespace Test
{
    //抽象类不能是密封的或静态的。  抽象类的成员只能被子类的对象来调用。注:抽象成员需要子类override重写后使用。非抽象成员由子类直接调用

    //不能初始化的类被叫做抽象类。抽象类只能被继承。不能被实例化。抽象类中可以包含非抽象方法,属性,字段等成员。
    abstract class A //A是一个抽象类
    {

        public abstract string Name { get; set; } //抽象类可以包含抽象属性

        public int Age { get; set; } //抽象类可以包含非抽象的属性



        public abstract void Method(); //抽象类可以包含抽象方法。抽象方法只需声明,无需实现。


        public void Sum(int a, int b) //抽象类可以包含非抽象的方法。
        {
            Console.WriteLine(a + b);

            Console.WriteLine("我的名字叫{0},今年{1}岁", Name, Age);
        }

        public A()  //抽象类还可以有构造函数。因为抽象类不能实例化,所以它就无法调用这个构造函数。这个构造函数只有在它所在的类的“派生类初始化”的时候才能够被执行到。
        {
            this.Age = 5;
            this.Name = "张三";
        }


    }
    class B : A
    {
        public override void Method()  //重写“抽象父类”的抽象方法。注意:实现的时候需要加override关键字
        {
            Console.WriteLine("实现父类的抽象方法");
        }

        public override string Name //重写“抽象父类”的抽象属性
        {
            get;
            set;
        }

        public B()
        {

        }
    }

    class C : B
    {

    }


    /*
    class C
    {
        //含有抽象方法的类一定是抽象类,而这里的C类并不是抽象类。所以下面定义的抽象方法报错

        public abstract string Myabstarct(); //错误 “Test.C.Myabstarct()”是抽象的,但它包含在非抽象类“Test.C”中	        
    }     
    */

    class InheritanceTest1
    {
        static void Main(string[] args)
        {
            //A a = new A(); //错误 ,抽象类不能被实例化。
            A a = new B(); //正确,实例化一个B类型的对象赋值给父类A的一个变量a
            a.Method(); //输出“实现父类的抽象方法”即:这里调用是子类的Method方法。


            B b = new B();
            b.Name = "燕子李三";

            b.Sum(5, 6); //抽象类的非抽象方法只能被子类的对象来调用。因为B类重写了A类的抽象Name属性,所以这里输出 “11 我的名字燕子李三,今年5岁”



            C c = new C();  //因为C类继承B类,而B类又继承A类,所以C类的对象可以调用A类的公有成员

            c.Sum(10, 6);  // 调用父类的父类的Sum方法。所以这里输出“16 我的名字张三,今年5岁,”




            Console.ReadKey();
        }
    }
}



狮子、猴子和鸽子都是一种动物,因此,可以建立一个Animal 抽象基类,让狮子、猴子和鸽子从其派生出来

    abstract class Animal //抽象的动物类
    {
        public abstract void eat();
    }

    class Lion : Animal    //狮子
    {
        public override void eat()
        {
            Console.WriteLine("我吃肉");
        }
    }

    class Monkey : Animal   //猴子
    {
        public override void eat()
        {
            Console.WriteLine("我吃香蕉");
        }
    }

    class Pigeon : Animal   //鸽子
    {
        public override void eat()
        {
            Console.WriteLine("我吃大米");
        }
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值