您的位置:首页 > 编程语言 > C#

C#基础-->抽象类(abstract)和接口(Interface)

2016-06-11 12:23 435 查看

1.0抽象类

好啦 方法的重写可以让派生类去重写基类的方法 也可以不用重写

如果必须让子类来重写基类中的方法呢 那么 抽象类这个时候就派上用场啦

Abstract的示例:

namespace Soaeon
{
class Program
{
static void Main(string[] args)
{

Person p = new Chinese();
p.SayHi();

Console.ReadKey();
}
}

abstract class Person
{
public string Name { get; set; }
public int Age { get; set; }

public abstract void SayHi();   //抽象方法

public void Sing()
{
Console.WriteLine("我是1只小小鸟。");
}

public virtual void Run()
{
Console.WriteLine("PiaPia的跑...");
}
}

class Chinese : Person
{
public override void SayHi()
{
Console.WriteLine("我是Chinese类的SayHi方法. 大家今天吃了吗?");
}
}

class American:Person
{
public override void SayHi()
{
Console.WriteLine("Hello,Im Jack,How Are You!");
}
}

}


抽象方法的注意点

a.方法被abstract修饰, 那么这个方法就成为了1个抽象方法.
b. 因为抽象方法要求所有的子类必须实现, 所以父类的抽象方法不会被调用到.
抽象方法不能有方法体. 连大括弧都不能有, 直接在方法的小括弧后面跟1个分号.
c. 抽象方法必须在抽象类中.
d. 抽象类不能创建实例.
因为抽象类中有抽象方法. 而抽象方法是没有实现的,
e. 每1个子类必须实现父类的抽象方法.否则就会报语法错误.
f. 在子类中无法通过base关键字调用父类的抽象方法.
因为父类的抽象方法没有实现.
g.子类快速实现父类抽象方法:
右键父类 实现抽象类
选中父类 ctrl+.

2.0接口

接口的简单介绍

接口的作用:定义了一些规则和规范,让别人必须遵守这些规则和规范

创建接口: 使用Interface 关键字

命名规范:大写的I开头 最后接上able

Interface 接口名称

{

}

接口的示例

namespace Soaeon
{
interface IRunable
{
void Run();
}

interface IFlyable
{
void Fly();
}

public class Animal
{
public double Weight { get; set; }

}

class Bird:Animal, IFlyable,IRunable
{

public void Fly()
{
Console.WriteLine("我在飞");
}

public void Run()
{
Console.WriteLine("我在跑.");
}
}

}


接口的本质

接口的本质是1个特殊的抽象类.
a.接口中只能定义方法、属性、索引器、事件.
b.并且接口中的成员不能有任何的实现.
c.接口中的成员, 不能有访问修饰符, 默认就是public.
成员也不能带abstract. 默认就是abstract.

接口和抽象类的异同

相同点:
都不能被直接实例化,都可以通过继承实现其抽象方法。

不同点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
抽象类可以定义字段、属性、包含有实现的方法。

接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: