c#入门 OOP技术
对象的一些特性
- 接口
- 继承
- 多态性
- 对象之间的关系
- 运算符重载
- 事件
- 引用类型和值类型
接口:
接口是吧公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合。一旦指定了接口就可以在类中实现它。类就可以支持接口所指定的所有属性成员。
接口不能单独存在
接口的命名 :一般以大写字母I开头
定义接口 关键字: interface
interface IPhone//用interface关键字 { void Dial();//public可省略 void PickUp(); void Send(); void Receive(); }
实现接口:
class NokiaPhone : IPhone 接口的引用就是在类后用“:” 再加接口名。
{ public void Dial() { Console.WriteLine("NokiaPhone is call"); } public void PickUp() { Console.WriteLine("hello,"); } public void Receive() { Console.WriteLine("dear......"); } public void Send() { Console.WriteLine("send..."); } }
本质:服务的调用者与服务的提供者之间的契约,所以必须用public来修饰接口中的所有成员;
继承:
什么是继承? 继承就是子承父业 就是继承的类(子类) 拥有被继承类(父类) 的所有成员。
任何一个类都可以从另一个类继承 但派生类(子类)不能访问父类的私有成员(个人理解:你可以拥有你父亲给你留下的财产,但你并不能拥有你父亲的经历)
1.继承是 派生类在基类已有的成员的基础之上,对基类进行的横向(类成员在数量上的扩充)和纵向(对某些类成员的重写 /对类成员版本的更新)的扩展
2.是一个: 子类的实例是一个父类的实例;父类型的实例不一定是子类型的实例;可以使用父类型的变量引用子类型的实例。
3.sealed 1.sealed关键字让类不能派生新类
2.c#一个类只能有一个基类
3.子类的访问级别不能超过父类(可以与父类的访问级别持平或者更低)
4.父类的实例构造器不能被子类继承
5.成员的访问级别是以类的访问级别为上限的
6.访问级别: public 访问不受限制。 protected 访问限于包含类或派生自包含类的类型。private 访问限于包含类。internal 访问限于当前程序集。
namespace HellOOp { class Program { static void Main(string[] args) { Car car = new Car();//声明一个Car的实例 Vehicle vehicle = new Vehicle() ; //声明一个Vehicle的实例 Console.WriteLine(car is object); //验证car是否派生自 object=>ture Console.WriteLine(car is Vehicle); //验证car是否派生自 Vehicle =>ture Console.WriteLine( vehicle is object); //验证vehicle是否派生自 object=>ture Console.WriteLine(vehicle is Car); //验证vehicle是否派生自 Car =>false } } class Vehicle//基类; { } class Car :Vehicle//继承了Vehicle类 { } } 4.父类的实例构造器不能被子类继承 namespace HellOOp //继承是 派生类在基类已有的成员的基础之上,对基类进行的横向(类成员在数量上的扩充)和纵向(对某些类成员的重写 /对类成员版本的更新)的扩展 { class Program { static void Main(string[] args) { Vehicle vehicle = new Vehicle("11111") ; Console.WriteLine(vehicle.Owner); Car car = new Car("aaa"); Console.WriteLine(car.Owner); car.ShowOwner(); Console.WriteLine(vehicle.Owner); } } class Vehicle//基类; { public Vehicle(string owner) { this.Owner = owner; } public string Owner { get; set; } } class Car : Vehicle//继承了Vehicle类 { public Car(string owner) : base(owner) { } public void ShowOwner() { Console.WriteLine(base.Owner);//base只能向上访问一层 } } }
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。
多态性:
继承的一个结果是派生于基类的类的方法和属性上有一定的重叠,因此可以使用相同的语法处理从同一个基类实例化的对象