C#抽象类总结

来源:互联网 发布:java.util.node 编辑:程序博客网 时间:2024/06/06 15:53

C#抽象类总结

1.         解释什么是抽象类?

抽象类是包含抽象方法的类。那么什么又是抽象方法呢?抽象方法是没有方法内容的,只有一个方法名和参数列表的方法。并以;结尾。为了标注他的与众不同,在他的返回类型前加abstract。并在class前加abstract

简言之,由abstract修饰的方法和类就是抽象的方法和类。

2.         抽象类的特点

  抽象类只能做父类

  抽象类不能实例化,既不能用new来产生属于抽象类的对象

  抽象类中除了抽象方法与普通方法不一样以外,其他的部分和普通类一样。即抽象类是普通类的特例,他特殊只是有抽象方法。所以它里面可以有字段,属性,普通方法。

3.         抽象方法的特点

  抽象方法是没有方法内容的,只有一个方法名和参数列表的方法。并以;结尾。

  在方法的返回类型前加abstract

  抽象方法的内容由他的继承类根据继承类自身情况去写。重写这个方法时把abstract替换成override

注意:②③也是抽象属性的定义和实现的方法

 

 

例如:

      abstract   class  Class1  //定义抽象类

    {  protected string name;

 protected abstract string Name {  //定义抽象属性

            get;  }

        protected int age;

        protected Class1() {

            name = "a";

            age = 4;  }

         protected  abstract void A();  //定义抽象方法

    }

   class Class2:Class1 {

protected override string Nam {  //实现抽象属性

            get { return name; }

        } //实现方法时他的修饰符只能是范围比父类大,或是相同

       protected  override void A() {  //实现抽象方法

            Console.WriteLine("aaaaaaaaaaaa"); }

          static void Main() {

      Class2 c = new Class2(); //正确,继承类可以定义自己的对象

           Class1 c1=new Class1(); //错误,抽象类不能定义自己的对象

            Console.WriteLine(c.Name + "/n" + c.age);

                c.A(); } }

4.抽象类里的普通方法如果也想在子类中重写,有两种方法:

①在父类普通方法的返回类型前写virtual,这就告诉系统父类这个方法是虚的方法,在子类中重写该方法时,在方法的返回类型前可以什么也不写,可以写new,也可以写override,然后子类对象调用的方法就是在子类中重写的方法。 

②在父类普通方法的返回类型前什么都不写,在子类中重写该方法时,在方法的返回类型前可以什么也不写,可以写new 。然后子类对象调用的方法就是在子类中重写的方法。 

例如:

Abstract Class C

{

      Protected abstract void A();

      Protected void B(){

           Console.WriteLine("bbbbb");

}

}

Class Class1:C

{

      Protected void A() {

      Console.WriteLine("aaaaaaa");  }

      //Protected new void B(){ //正确}

      //Protected override void B(){//正确}

      Protected void B(){ //正确

 

      Console.WriteLine("cccccccccccccc");

}

Static void Main() {

      Class1 c1=new Class();

      c.A();                         结果是:aaaaaaa

                                        cccccccccccccc

      c.B();

}

}

原创粉丝点击