新濠天地 > E编程 > 新濠天地但非抽象类中不得以

原标题:新濠天地但非抽象类中不得以

浏览次数:168 时间:2019-09-23

1.抽象类概述及表明

抽象类与非抽象类的尤为重要分歧:

·抽象类无法直接被实例化

·抽象类中得以分包抽象成员,但非抽象类中不可能

·抽象类无法被密封

举个小例子

public abstract class oneClass

{

  public int i;

  public void denylau()

  {

  }

}

抽象类是超过常规规的类,只是无法被实例化;除此以外,具备类的别样特色;首要的是抽象类能够回顾抽象方法,那是惯常类所无法的。抽象方法只好宣称于抽象类中,且不包蕴其余完毕,派生类必需覆盖它们。别的,抽象类能够派生自二个抽象类,能够覆盖基类的虚幻方法也得以不掩饰,假如不遮蔽,则其派生类必得覆盖它们。在统筹有个别大的模块单元时,能够用到抽象类。

抽象类与接口紧凑有关。然接口又比抽象类更抽象,这主要浮现在它们的距离上:1)类能够完结Infiniti个接口,但仅能从贰个虚幻(或另外别的项目)类承继,从抽象类派生的类仍可完成接口,进而得出接口是用来缓和多种承继难点的。2)抽象类当中能够存在非抽象的办法,可接口不可能且它在这之中的主意只是二个宣称必需用public来修饰未有切实可行完成的章程。3)抽象类中的成员变量能够被分化的修饰符来修饰,可接口中的成员变量暗中同意的都是静态常量(static final)。4)那或多或少也是最要紧的一些实质的一点"抽象类是指标的架空,然接口是一种行为标准"。

以上是它们本人的争议,下边再来从骨子里行使讲讲它们的争议!

不一致之处:
1、定义

抽象类表示该类中或许曾经有一对艺术的切切实实定义,不过接口就唯有只可以定义种种艺术的界面(方法名,参数列表,再次回到类型),并不关切具体细节。
1、用法

1)在承袭抽象类时,必须覆盖该类中的每八个抽象方法,而种种已落到实处的形式必需和抽象类中钦命的方法同样,接收一样数量和项目标参数,具备一样的再次回到值,那或多或少与接口一样。

2)当父类已有实在功效的法卯时,该办法在子类中能够不要已毕,直接援引的主意,子类也足以重写该父类的章程(承袭的定义)。

3)而实现(implement)叁个接口(interface)的时候,是早晚要促成接口中所定义的持有办法,而不行遗漏任何二个。

4)别的,抽象类无法发出对象的,但足以由它的达成类来声称对象。 有鉴于此,在落到实处接口时,大家也常写三个抽象类,来兑现接口中的某个子类所需的通用方法,接着在编写制定各类子类时,就能够承接该抽象类来接纳,省去在各类都要兑现通用的诀要的麻烦

1抽象类

(1) 抽象方法只作注明,而不带有完毕,能够用作是平昔不达成体的虚方法

(2) 抽象类无法被实例化

(3) 抽象类能够但不是必需有抽象属性和虚幻方法,但是一旦有了指雁为羹方法,就必将在把这几个类声明为抽象类

(4) 具体派生类必得覆盖基类的肤浅方法

(5) 抽象派生类能够覆盖基类的肤浅方法,也能够不遮掩。如若不隐蔽,则其实际派生类必需覆盖它们。如:

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();
}
}

2.虚无方法概述及注解

扬言抽象方法时需注意:·抽象方法必得证明在抽象类中  ·表明抽象方法时,不可能选择virtual、static、private修饰符。

在抽象类中架空方法不提供完结。

如:

public abstract class myTestClass()

{

  public abstract void method();

}

3.抽象类与虚无方法的行使

直接比方子,解说例子喽!

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

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(); //使用抽象类对象调用抽象类中的的说梅止渴方法
}
}
}

上例中经过派生类的对象driveclass来实例化抽象类,然后利用抽象类采访抽象类中的属性及格局。

上面那一个小例子,留意的相爱的人会开掘,怎么抽象类和我们上一篇文章讲的接口差不离吧?那么究竟抽象类和接口存在什么不一样吧?

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

·它们的派生类只可以继续二个基类,即只好延续四个抽象类,但是能够继续八个接口。

·抽象类中得以定义成员的贯彻,但接口中不得以。

·抽象类中蕴藏字段、构造函数、析构函数、静态成员或常量等,接口中不能。

·抽象类中的成员能够私有的(只要不是虚幻的)、受保证的、内部的或受保险的当中成员,但接口中的成员必需是共用的。

PS:抽象类和接口这两连串型用于完全两样的目标。抽象类重要作为对象连串的基类,分享有个别器重特征,举个例子共同的目标和组织。接口则要害用以类,那些类在基础水平上有所不相同,但还可以做到有些同样的职分。

二、接 口

(1) 接口不能够被实例化

(2) 接口只可以分包方法评释

(3) 接口的积极分子包罗方法、属性、索引器、事件

(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;
}
}

(5) 接口中的全数成员默以为public,由此接口中无法有private修饰符

(6) 派生类必需达成接口的装有成员

(7) 二个类能够平昔达成三个接口,接口之间用逗号隔离

(8) 三个接口能够有四个父接口,实现该接口的类必得兑现全数父接口中的全数成员
三、抽象类和接口

相同点:

(1) 都得以被接续

(2) 都不能够被实例化

(3) 都足以包含方法注明

(4) 派生类必需兑现未落到实处的办法

区 别:

(1) 抽象基类能够定义字段、属性、方法完成。接口只好定义属性、索引器、事件、和办法注解,无法包罗字段。 (2) 抽象类是一个不完整的类,必要越来越细化,而接口是二个行为标准。微软的自定义接口总是后带able字段,表明其是发挥一类“小编能做。。。”

(3) 接口能够被多种落实,抽象类只好被单纯承接

(4) 抽象类更加多的是概念在一密密麻麻紧凑有关的类间,而接口大繁多是关系疏松但都落到实处某一效应的类中

(5) 抽象类是从一多级相关对象中架空出来的概念, 因而反映的是事物的中间共性;接口是为着满足外界调用而定义的一个成效约定, 因而反映的是东西的表面特征

(6) 接口基本上不辜负有继续的别的具体特点,它只是承诺了能够调用的艺术

(7) 接口可以用来帮助回调,而继续并不享有这些天性

(8) 抽象类完结的具体方法默感觉虚的,但达成接口的类中的接口方法却默感到非虚的,当然你也足以注解为虚的 (9) 如若抽象类达成接口,则能够把接口中方法映射到抽象类中作为抽象方法而不用完成,而在抽象类的子类中贯彻接口中艺术

本文由新濠天地发布于E编程,转载请注明出处:新濠天地但非抽象类中不得以

关键词:

上一篇:没有了

下一篇:没有了