您的位置:首页 > 其它

抽象类和抽象方法

2014-12-26 20:28 197 查看
抽象类不能是密封的或静态的。抽象类的成员只能被子类的对象来调用。注:抽象成员需要子类override重写后使用。非抽象成员由子类直接调用  

不能初始化的类被叫做抽象类。抽象类只能被继承。不能被实例化。抽象类中可以包含非抽象方法,属性,字段等成员。 

例如:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication34
{

abstract class People
{
public abstract string Name { get; set; }//抽象类可以包含抽象属性
public int Age { get; set; }//抽象类可以包含非抽象的属性

public abstract void Method();//抽象类可以包含抽象方法
public void Sum(int a, int b)//抽象类可以包含非抽象方法
{
Console.WriteLine ("我的学号是:{0}",a+b );
Console.WriteLine("我的名字叫{0},今年{1}岁了", Name, Age);
}
public People()//抽象类还可以有构造函数。因为抽象类不能实例化,所以它就无法调用这个构造函数。这个构造函数只有在它所在的类的“派生类初始化”的时候才能够被执行到。
{
this.Age =5;
this.Name ="武大郎" ;
}
}

class B:People
{
public override void Method()//重写“抽象父类”的抽象方法,需要加上override关键字
{
Console.WriteLine("实现父类的抽象方法");
}
public override string Name
{
get;
set;
}
public B
{

}
}

class C:B
{

}

//class C //含有抽象方法的类一定是抽象类,这里的c 类不是抽象类。所以定义抽象方法会报错。
//{
// public abstract void mmabstract();
//}
class Program
{
static void Main(string[] args)
{
//People a=new A();//错误,抽象类不能实力化。

People a=new B();//正确,实例化一个B类型的对象赋值给父类A的一个变量。
a.Method();//输出实现父类的抽象方法,即:这里调用是子类的Method方法。

B b=new B ();
b.name="西门庆";
b.sum(8,9);//抽象类的非抽象方法只能被子类的对象来调用。因为B类重写了A类的抽象Name属性,这里输出“我的学号是17,我的名字叫西门庆,今年5岁”

C c=new C ();//因为c类继承B类,B类又继承A类,所以c类对象可调用A类公有成员
c .sum(10,6);//调用父类的父类的Sum方法,这里输出“我的学号是16,我的名字叫武大郎,今年5岁”

Console .ReadKey ();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: