C#抽象类和抽象方法

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

  1. 抽象类概述及声明

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

①.抽象类不能直接被实例化

②.抽象类中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。(非抽象     类中不能有抽象方法)。


③.抽象类不能被密封

以上会在下面例子中一一验证:

class Program

{

static void Main(string[] args)

{

M m = new M();//错误提示:无法创建抽象类或接口M的实例。验证了①,抽象类和接口不能被实例化

}

}

public abstract class M

{

public void A()

{

Console.WriteLine("调用了A方法");

}

public abstract void B() //错误提示:M.B()无法声明主体,因为它标记为abstract。也就是说,抽象方

法不能有方法体。

{

Console.WriteLine("调用了B方法");

}

public abstract void G();

}

public class C

{

public abstract void H();//错误提示:C.D()是抽象的,但它包含在非抽象类C中。再对比 M 类中的方法A()、B()来看,就验证了②:非抽象类中不能有抽象方法;抽象类中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。

public void D()

{

}

}

public sealed abstract class E //错误提示:E 是抽象类,它不能是密封(sealed)或静态(static)的。这就验证了③。

{

}

public static abstract class F //错误提示:F 是抽象类,它不能是密封(sealed)或静态(static)的。这就验证了③。

{

}

2.抽象方法概述及声明

声明抽象方法时需注意:

①.抽象方法必须声明在抽象类中(上面已经验证)。  

②.声明抽象方法时,不能使用virtual、static、private修饰符。

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

下面例子中会一一验证:

class Program

{

static void Main(string[] args)

{

}

}

public abstract class M

{

public abstract void A();

public virtual abstract void B();//错误提示:抽象方法 B 不能标记为 virtual。因为虚方法和抽象方法属于同一个等级的,并列关系。

public static abstract void C();//错误提示:静态成员 C不能标记为overrid、virtual或abstract。

private abstract void D();  //错误提示:虚拟成员或抽象成员不能是私有的。因为虚拟成员是让继承类来override的,如果是private,继承类都不能看见;抽象方法要是私有的话,这个抽象方法所在的抽象类的子类就没法实现这个抽象方法,看不见。

A();//抽象方法在自己的抽象类中不能有方法体,所以不能在本类中实现。要在继承类中实现。

}

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

直接举例子:

using System;

using System.Collections.Generic;

using System.Text;

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

}

}

}

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

时间: 2024-10-10 16:47:57

C#抽象类和抽象方法的相关文章

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

抽象类、抽象方法总结

首先区别抽象方法与虚方法:①从方法的声明来看:抽象方法只是方法的声明,没有方法体,关键字为abstract:虚方法则是有方法体的,关键子为virtual②从方法的声明位置来看:抽象方法只能声明在抽象类中:而虚方法则没有什么限制③从方法的使用来看:抽象方法必须在派生类中进行override,否则包含抽象方法的抽象类不能被实例化:而虚方法在派生类中则可以选择被重写,也可以选择不进行重写 抽象方法和虚方法的共同点:在使用的时候都是使用override关键字进行覆盖 抽象类普通类的区别与联系:①抽象类不

走近抽象类与抽象方法

一.定义 MSDN:抽象类是一些留有部分或全部成员未实现的类,以便可以由派生类来提供实现.在C#中,当一个类被abstract关键字修饰,我们就称之为抽象类. 二.抽象类的特点 1.抽象类不能被实例化. 1-1 ? 1 2 3 4 public abstract class People {       protected abstract void Speak(string s); } 1-2 ? 1 People p = new People(); 当我们试图执行1-2的代码时,编译器提示如

关于Java 实现抽象类的抽象方法的特性的利用---面向切面

今天看工作看代码突然有了以下设想: /** * Created by zq on 2017/5/25. * 抽象类 */ public abstract class AbstractC { public void C(){ D(); System.out.println("C_1"); E(); } public abstract void D(); // { // System.out.println("C_1"); // } public abstract vo

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

一.抽象类和抽象方法的概念 在基类中的虚方法有时候不可能被调用到,而只是表达一种抽象的概念,用以为它的派生类提供一个公共的界面. C#中引入了抽象类(abstract class)的概念,可以将它定义成抽象方法.将该方法所在的类定义成抽象类. 抽象方法:只包含方法定义,但没有具体实现的方法,需要其子类或者子类的子类来具体实现. 抽象类:抽象类是能够包含抽象成员的类.抽象类只能作为基类使用,不能被实例化. 二.抽象类和抽象方法的使用原则 1  抽象类中可以存在非抽象方法,抽象方法必须包含在抽象类中

第二章 C#继承&amp;继承类型&amp;虚函数&amp;抽象类&amp;抽象函数&amp;抽象方法&amp;隐藏方法

继承:实现继承,接口继承. C#不支持多实现继承,支持多接口继承 public class Class4:Class3,IInterface1,IInterface2 { } 虚方法:virtual 基类中声明virtual方法,在派生类中可以重写,并且调用的时候总是调用重写的方法. public class Class1 { public virtual void A() { Console.WriteLine("Class1.A"); } public void B() { Con

java抽象类和抽象方法之间的关系

抽象类和抽象方法之间的关系有抽象方法的类,一定是抽象类:抽象类不一定有抽象方法当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类因为子类是继承父类全部内容,所以也就相当于子类中也有了抽象方法,通过重写,可以将抽象方法覆盖. 抽象类的特点:必须有abstract关键字修饰,不可以通过new来创建对象,抽象方法不可以写函数体(非抽象方法必须写函数体) 关键字小总结:不想让别的类重写的方法,用final:内容不确定的方法,用abstract(子类中用法不一样)

2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class TemplateThread { //如果这个方法不想被子类或者别人随意改动[这样子类就不能覆写该方法了],这里方法就要设置为final方法 public final void println(String message){ System.out.println("###################

java中的抽象类和抽象方法

abstract修饰抽象类和抽象方法. 包含抽象方法的类只能定义成抽象类,但是抽象类中可以没有抽象方法. 抽象方法没有方法体.只能由子类提供实现(重写). 抽象类只能被继承,final修饰的类不能被继承,所以abstract和final不能共存. 抽象方法如下所示: public abstract class Sharp//抽象类 { private String color; public abstract String getType();//抽象方法 public abstract dou