C#抽象类:
C#抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
abstract 修饰符指示被修改内容的实现已丢失或不完整。 abstract 修饰符可用于类、方法、属性、索引和事件。 在类声明中使用 abstract 修饰符来指示某个类仅用作其他类的基类,而不用于自行进行实例化。 标记为抽象的成员必须由派生自抽象类的非抽象类来实现。
用abstract修饰的方法,称为抽象方法。
访问修饰符 abstract 方法返回值类型 方法名(参数列表);
例如:
public abstract void Practice();
抽象方法是一种特殊的虚方法,它只起声明作用,所以只加一个“;”号,一定不能带实现部分。
需要注意的是,抽象方法必须定义在抽象类中。
抽象类:
定义抽象类时,若使用 abstract 修饰类,将其放到 class 关键字的前面,语法形式如下:
访问修饰符 abstract class 类名 { //类成员 }
其中“abstract”关键字也可以放到访问修饰符的前面。
在抽象类中可以定义抽象方法,也可以定义非抽象方法。
通常抽象类会被其他类继承,并重写其中的抽象方法或者虚方法。
抽象类具有以下功能:
在方法或属性声明中使用 abstract 修饰符,以指示该方法或属性不包含实现。
抽象方法具有以下功能:
public abstract void MyMethod();
除了声明和调用语法方面不同外,抽象属性的行为与抽象方法相似。
用简单的话来说抽象类的功能就是:我是师傅(抽象类),你要是跟了(继承)师傅,你就必须得会干什么(实际实现)
例如:老子会打人,那你也必须会打人,但你是轻轻的打,还是狠狠的打,你自己决定,但你必须得会打人。
实例:
类 DerivedClass 派生自抽象类 BaseClass 。 抽象类包含抽象方法 AbstractMethod ,以及两个抽象属性 X 和 Y 。
abstract class BaseClass // Abstract class public abstract void AbstractMethod(); // Abstract method public abstract int X { get; } public abstract int Y { get; } class DerivedClass : BaseClass public override void AbstractMethod() public override int X // overriding property public override int Y // overriding property var o = new DerivedClass(); Console.WriteLine($'x = {o.X}, y = {o.Y}'); // Output: x = 111, y = 161
总结:
1,抽象类说明:
①.抽象类中如果有抽象方法,那么被继承的具体类一定要实现抽象类中得所有抽象方法。 ②.当然,如果是抽象类B继承抽象类A,那么抽象类B可以实现基类A中的抽象方法,可以不实现A中得抽象方法
2,类(抽象类)的多态
abstract class A { public abstract void AFunction (); } abstract class B : A { public abstract void BFunction (); }
class C : B { public override void AFunction() { Console.WriteLine ('AFucntion.'); } public override void BFunction() { Console.WriteLine ('BFunction.'); } }
3,总结:
1.抽象方法只作声明,而不包含实现,抽象方法旨在继承后实现,所以不能用private修饰。 2.抽象类不能被直接实例化。 3. 抽象类可以没有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类。 4.如果抽象类的派生类不是抽象类,那么必须重写抽象类的所有抽象方法。
|