关闭

C#入门10.5——抽象类与抽象方法声明

321人阅读 评论(0) 收藏 举报
分类:

抽象类与非抽象类

抽象类前有关键字abstract,没有则为非抽象类

声明格式

public abstract class Fly//抽象类要加关键字

{

    public abstract void flys();//声明抽象方法不能有方法体

}

抽象类不能实例化,必须通过集成由派生类实现其抽象方法,因此不能用new,不能sealed

如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类

如果一个非抽象类从抽象类中派生,则其必须通过重载来实现所有继承而来的抽象成员

定义:方法前有abstract就被称为抽象方法,抽象方法不提供任何实际实现

public abstract class Class1
    {
        public abstract void Method1();//抽象类与抽象方法声明中必须包含abstract,并且抽象方法不能有方法体。
        //抽象类的声明就是为了实现派生或继承,所以我们不能将它同时标记为sealed
        public abstract void Method2();

        public void Add(int a,int b)//抽象类中可以包含非抽象方法
        {
            Console.WriteLine(a+b);
        }
    }
public abstract class Class2: Class1//如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类
    {
        public override void Method1()
        {
            Console.WriteLine("这是抽象方法1");
        }
    }


注意:抽象方法必须在抽象类中声明

不能使用static、private或virtual修饰符

方法不能有任何可执行程序,哪怕是方法体{}

重写抽象方法时采用override


实例1:Pow类定义了一个求幂对象的抽象概念。Pow类方法是抽象的,PowB类和PowC类是Pow的具体实现。

 class Program
    {
        static void Main(string[] args)
        {
            PowB myPowB = new PowB();
            myPowB.PowMethod(2,10);
            PowC myPowC = new PowC();
            myPowC.PowMethod(2,10);
            Console.ReadKey();
        }
    }
public abstract class Pow
    {
        public abstract void PowMethod(int x, int y);
        //abstract方法 没有自己的实现
        //virtual方法  有自己的实现
        //共同点:都可以通过override来实现对原有方法的重写

    }
 class PowB:Pow
    {
        public override void PowMethod(int x,int y)
        {
            int pow = 1;
            for(int i=1;i<=y;i++)
            {
                pow *= x;
            }
            Console.WriteLine("求幂的结果是" + pow);
        }

    }
class PowC : Pow
    {
        public override void PowMethod(int x, int y)
        {
            Console.WriteLine("求幂的结果是"+System.Math.Pow(x, y));
        }

    }




0
0
查看评论

Java的抽象类的声明和使用方法

抽象类的特点: 包含一个抽象方法的类就是一个抽象类 抽象方法是只声明方法名而未实现方法体的是抽象方法 抽象类不能直接进行实例化的操作,必须被子类继承 如果使用抽象类,必须使用子类来实现并覆写抽象类中所有抽象方法 抽象类只是否能使用final类型? 1.抽象方法必须被子类全部继...
  • itpinpai
  • itpinpai
  • 2012-11-01 19:47
  • 6295

C# 抽象类和抽象方法知识总结

1 抽象类不能被实例化  定义抽象类AbstractClass: abstract class AbstractClass { public abstract void AbstractMethod1(); public abstract void Abstr...
  • tiana0
  • tiana0
  • 2013-11-20 21:49
  • 4914

C#中的抽象类和抽象方法

一、抽象类和抽象方法的概念         在基类中的虚方法有时候不可能被调用到,而只是表达一种抽象的概念,用以为它的派生类提供一个公共的界面。 C#中引入了抽象类(abstract class)的概念,可以将它定义成抽...
  • zjx86320
  • zjx86320
  • 2014-02-26 14:55
  • 1898

在Python中定义和使用 抽象类及抽象方法 抽象属性

在Python中定义和使用抽象类及抽象方法
  • sxingming
  • sxingming
  • 2016-09-06 13:50
  • 1948

C# 抽象类和抽象方法详解

首先,在学习抽象方法的时候,我们必须清楚在C#中为什么会存在抽象方法,或者说为什么需要抽象方法。 我们知道,接口可以包含方法的申明和属性,但是方法中不包含代码,实现这个接口的方法必须包含接口中的所有方法和属性,但是现在出现这种情况,假设需要一个“接口”,要求类实现某些方法和属性,但是需要这...
  • u013180863
  • u013180863
  • 2015-09-06 10:06
  • 1064

抽象类的用法以及定义

与具体类比较 1.抽象类不能直接实例化 2.抽象类可以不含抽象方法 3.抽象类中含有抽象方法时,如果子类继承该抽象类,则必须重写该抽象方法 4.抽象类可以有非抽象方法 5.允许(但不要求)抽象类包含抽象成员。 6.抽象类不能被密封。 7.抽象类含有非抽象方法,而且子类...
  • Lingfeng928
  • Lingfeng928
  • 2016-07-15 15:07
  • 4179

C# 虚方法与抽象方法区别

抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。 重写的子类虚函数就是被覆盖了。 抽象方法 使用abstract关键字 public abstract bool Withdr...
  • snakorse
  • snakorse
  • 2015-02-17 21:40
  • 1603

C#中的继承 (继承、抽象类和抽象方法、接口)

一、继承什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。1、继承C#中的类:C#不支持多重继承,C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object)。派生类继承基类的语法如下:using Syste...
  • wokeyid
  • wokeyid
  • 2008-05-05 10:25
  • 3210

C# 中普通类、抽象类、接口之间的区别

一、普通类和抽象类之间的异同 1.都可以被继承 2.抽象类不能被实例化,只是用来继承的。普通类可以实例化 3.抽象方法只有含方法声明而没有方法体且必须包含在抽象类里面 4.子类继承抽象类必须实现抽象类中的抽象方法除非子类也是抽象类 ...
  • T_Twory
  • T_Twory
  • 2016-05-31 09:41
  • 1998

C# 抽象类与抽象方法的作用与实例

在C#中,允许把类和方法声明为抽象类与抽象方法,具体的声明方法是在类名或方法名前加上abstract关键字。 那么我们什么时候应该用抽象类呢? 如果一个类设计的目点是用来被其它类继承的,它代表一类对象的所具有的公共属性或方法,那个这个类就应该设置为抽象类。 抽象类与其它的类有什么区别呢? 抽象类是不...
  • ryong1267
  • ryong1267
  • 2015-08-16 21:16
  • 171
    个人资料
    • 访问:181451次
    • 积分:5307
    • 等级:
    • 排名:第6109名
    • 原创:322篇
    • 转载:194篇
    • 译文:0篇
    • 评论:22条
    最新评论