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就可以继承接口,而不能继承类。
相关文章推荐
- C#基础-->方法的重载(overload)与重写(override)
- C#将状态栏标签靠右排列
- C#操作 word代码
- C#中调用存储过程
- C# backgroundworker使用方法
- 迭代器模式
- C# INotifyPropertyChanged使用方法
- c# TreeView树形菜单
- C#编程之IList<T>、List<T>和ArrayList
- c# TreeView树形菜单
- C#中Any CPU和X86和X64平台的差异对比
- C# 正规则表达式
- C#写爬虫,版本V1.0
- C#写爬虫,版本V1.0
- 20160611
- C#一个简单的委托示列
- C#一个简单的委托
- 关于C#窗体中的三类坐标系
- C#由变量捕获引起对闭包的思考
- C#设计模式—建造者模式