您的位置:时时app平台注册网站 > 编程知识 > 抽象类、抽象方法、接口【时时app平台注册网站

抽象类、抽象方法、接口【时时app平台注册网站

2019-11-28 03:09

using System;
public abstract class A //抽象类A
{ private int num=0;
public int Num //抽象类包含属性
{ get
{ return num;
} set
{ num = value;
}
}
public virtual int getNum() //抽象类包含虚方法
{
return num;
}
public void setNum(int n) // //抽象类包含普通方法
{
this.num = n;
}
public abstract void E(); //类A中的抽象方法E
}
public abstract class B : A //由于类B继承了类A中的抽象方法E,所以类B也变成了抽象类
{
}
public class C : B
{
public override void E() //重写从类A继承的抽象方法。如果类B自己还定义了抽象方法,也必须重写 {
//throw new Exception("The method or operation is not implemented.");
}
}
public class Test
{
static void Main()
{
C c = new C();
c.E();
}
}

·抽象类中包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。

(4) 派生类必须实现未实现的方法

{

抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。
1、用法

}

在抽象类中抽象方法不提供实现。

3.抽象类与抽象方法的使用

不同之处:
1、定义

如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法

  public void denylau()

  }

(4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。
如:
public delegate void EventHandler(object sender, Event e);
public interface ITest
{
//int x = 0;
int A
{
get;
set;
}
void Test();
event EventHandler Event;
int this[int index] {
get;
set;
}
}

·抽象类中的成员可以私有的(只要不是抽象的)、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。

举个小例子

抽象类与非抽象类的主要区别:

(3) 接口的成员包括方法、属性、索引器、事件

public abstract class oneClass

区 别:

·抽象类中可以包含抽象成员,但非抽象类中不可以

  {

举个小例子

·抽象类中包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。

PS:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍然可以完成某些相同的任务。

{

上面这个小例子,细心的朋友会发现,怎么抽象类和我们上一篇文章讲的接口差不多吗?那么究竟抽象类和接口存在哪些区别呢?

1抽象类

  public abstract void method();

2.抽象方法概述及声明

Ok,下面就介绍下抽象类和接口的区别喽:

·抽象类不能直接被实例化

·抽象类中可以定义成员的实现,但接口中不可以。

如:

namespace _
{
    public abstract class myClass
    {
        private string id = "";
        private string name = "";
        /// <summary>
        /// 编号属性及实现
        /// </summary>
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        /// <summary>
        /// 姓名属性及实现
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        /// <summary>
        /// 抽象方法,用来输出信息
        /// </summary>
        public abstract void ShowInfo();
    }
    public class DriveClass:myClass                     //继承抽象类
    {
        /// <summary>
        /// 重写抽象类中输出信息的方法
        /// </summary>
        public override void ShowInfo()
        {
            Console.WriteLine(ID " " Name);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DriveClass driveclass = new DriveClass();   //实例化派生类
            myClass myclass = driveclass;               //使用派生类对象实例化抽象类
            myclass.ID = "BH0001";                      //使用抽象类对象访问抽象类中的编号属性
            myclass.Name = "TM";                        //使用抽象类对象访问抽象类中的姓名属性
            myclass.ShowInfo();                         //使用抽象类对象调用抽象类中的的抽象方法
        }
    }
}

}

}

1)在继承抽象类时,必须覆盖该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值,这一点与接口相同。

  public void denylau()

(2) 接口只能包含方法声明

直接举例子,讲解例子喽!

·抽象类中可以定义成员的实现,但接口中不可以。

1.抽象类概述及声明

{

在抽象类中抽象方法不提供实现。

(5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。如:

2.抽象方法概述及声明

(1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法

  public int i;

(1) 都可以被继承

{

(5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性

public abstract class myTestClass()

(3) 接口可以被多重实现,抽象类只能被单一继承

·抽象类不能被密封

}

上例中通过派生类的对象driveclass来实例化抽象类,然后使用抽象类访问抽象类中的属性及方法。

PS:抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。接口则主要用于类,这些类在基础水平上有所不同,但仍然可以完成某些相同的任务。

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

(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类

如:

(1) 接口不能被实例化

·它们的派生类只能继承一个基类,即只能继承一个抽象类,但是可以继承多个接口。

上例中通过派生类的对象driveclass来实例化抽象类,然后使用抽象类访问抽象类中的属性及方法。

声明抽象方法时需注意:·抽象方法必须声明在抽象类中  ·声明抽象方法时,不能使用virtual、static、private修饰符。

(1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。 (2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接口总是后带able字段,证明其是表述一类“我能做。。。”

  {

·抽象类不能被密封

·抽象类不能直接被实例化

2)当父类已有实际功能的方法时,该方法在子类中可以不必实现,直接引用的方法,子类也可以重写该父类的方法(继承的概念)。

抽象类与接口紧密相关。然接口又比抽象类更抽象,这主要体现在它们的差别上:1)类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。2)抽象类当中可以存在非抽象的方法,可接口不能且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。3)抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。4)这一点也是最重要的一点本质的一点"抽象类是对象的抽象,然接口是一种行为规范"。

声明抽象方法时需注意:·抽象方法必须声明在抽象类中  ·声明抽象方法时,不能使用virtual、static、private修饰符。

(6) 派生类必须实现接口的所有成员

上面这个小例子,细心的朋友会发现,怎么抽象类和我们上一篇文章讲的接口差不多吗?那么究竟抽象类和接口存在哪些区别呢?

  public abstract void method();

(7) 一个类可以直接实现多个接口,接口之间用逗号隔开

1.抽象类概述及声明

直接举例子,讲解例子喽!

public abstract class oneClass

以上是它们本身的异同,下面再来从实际应用讲讲它们的异同!

抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。在设计一些大的模块单元时,可以用到抽象类。

public abstract class myTestClass()

(8) 一个接口可以有多个父接口,实现该接口的类必须实现所有父接口中的所有成员
三、抽象类和接口

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

  }

·抽象类中的成员可以私有的(只要不是抽象的)、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。

(8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的 (9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

(6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法

(2) 抽象类不能被实例化

3.抽象类与抽象方法的使用

3)而实现 (implement)一个接口(interface)的时候,是一定要实现接口中所定义的所有方法,而不可遗漏任何一个。

  public int i;

抽象类与非抽象类的主要区别:

namespace _
{
public abstract class myClass
{
private string id = "";
private string name = "";
///
/// 编号属性及实现
///
public string ID
{
get
{
return id;
}
set
{
id = value;
}
}
///
/// 姓名属性及实现
///
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
///
/// 抽象方法,用来输出信息
///
public abstract void ShowInfo();
}
public class DriveClass:myClass //继承抽象类
{
///
/// 重写抽象类中输出信息的方法
///
public override void ShowInfo()
{
Console.WriteLine(ID " " Name);
}
}
class Program
{
static void Main(string[] args)
{
DriveClass driveclass = new DriveClass(); //实例化派生类
myClass myclass = driveclass; //使用派生类对象实例化抽象类
myclass.ID = "BH0001"; //使用抽象类对象访问抽象类中的编号属性
myclass.Name = "TM"; //使用抽象类对象访问抽象类中的姓名属性
myclass.ShowInfo(); //使用抽象类对象调用抽象类中的的抽象方法
}
}
}

(2) 都不能被实例化

(4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中

(7) 接口可以用于支持回调,而继承并不具备这个特点

4)另外,抽象类不能产生对象的,但可以由它的实现类来声明对象。 有鉴于此,在实现接口时,我们也常写一个抽象类,来实现接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰

·抽象类中可以包含抽象成员,但非抽象类中不可以

Ok,下面就介绍下抽象类和接口的区别喽:

相同点:

(3) 都可以包含方法声明

(5) 接口中的所有成员默认为public,因此接口中不能有private修饰符

二、接 口

·它们的派生类只能继承一个基类,即只能继承一个抽象类,但是可以继承多个接口。

(4) 具体派生类必须覆盖基类的抽象方法

本文由时时app平台注册网站发布于编程知识,转载请注明出处:抽象类、抽象方法、接口【时时app平台注册网站

关键词: