面向对象基础(2)
本博文意在巩固基础知识,高手请绕过。
面向对象的三大特征:封装、继承、多态
什么是封装?
每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。这样方法和属性包含在类中,通过类的实例来实现。
类将数据和操作数据的方法结合成一个单位。在设计类时,不希望直接存取类中的数据,而是希望通过方法来存取数据。如此就可以达到封装数据的目的,方便以后维护、升级,也可以在操作数据时多一层判断,提高安全性。
使用封装可以将数据隐藏起来,形成一个封闭空间。在编写程序时,对类的成员使用不同的访问修饰符,从而定义它们的访问级别。
封装的优点:
1.减少耦合;
2.类内部的实现可以*的修改;
3.类具有清晰的对外接口。
什么是继承?
对象的继承代表了一种“is-a”的关系,如果两个对象A和B,可以描述为“B是A”,则表明B可以继承A。
C#中提供了类的继承机制,只支持单继承,不能同时继承多个类。被继承的类叫基类也称父类,继承其成员的类叫派生类也称子类。
一个类从另一个类派生出来时,派生类继承了基类的特性。除了构造函数和析构函数外,派生类隐式地继承了直接基类的所有成员。子类可以从基类中继承的成员有方法、域、属性、事件、索引指示器。构造函数虽然不能被继承的,但是子类依然可以使用base关键字进行调用。
子类除了从基类继承的属性和功能外,还可以有属于自己的特性。子类还可以通过方法重写的方式来实现父类的功能。
1 class Apple //基类Apple 2 { 3 public void Applenum() 4 { 5 Console.WriteLine("苹果!"); 6 } 7 } 8 class BigApple:Apple //BigApple类继承于Apple 9 { 10 public new void Applenum() //使用new重写方法 11 { 12 Console.WriteLine("大苹果!"); 13 } 14 } 15 static void Main(string[] args) 16 { 17 Apple apple=new Apple(); //创建Apple实例 18 apple.Applenum(); 19 BigApple bigApple=new BigApple(); //创建BigApple实例 20 bigApple.Applenum(); 21 Console.ReadKey(); 22 }
什么是多态?
多态就是不同的类的实例,执行同一操作,最后产生不同的执行结果。就像两个苹果,虽然都属于苹果类,但有大小和形状不同,大小和形状都属于苹果的属性,这样就产生了多态性。
多态性分为编译时多态和运行时多态。
编译时的多态性是通过重载来实现的。方法重载是指一个方法名称具有多个数量或类型的参数的函数,传递的参数也不同,实现不同的功能。
运行时的多态性是指程序运行过程中,根据实际情况来实现不同操作。在C#中,运行时的多态性通过虚成员实现。
积累中需要重写的函数使用关键字virtual定义,该关键字放在返回类型前面。而派生类如果要重写虚函数,则要使用关键字override,该关键字放在返回类型前面。
例如:
通过重载实现编译时多态
1 class Apple 2 { 3 private int applenum; 4 private string sapple; 5 public void Applenum() 6 { 7 Console.WriteLine("一共有几个苹果呀?"); 8 } 9 public void Applenum(int applenum) 10 { 11 Console.WriteLine("一共有{0}个苹果!",applenum); 12 } 13 public void Applenum(int applenum,string sapple) 14 { 15 Console.WriteLine("一共有{0}个苹果!{1}",applenum,sapple); 16 } 17 } 18 19 static void Main(string[] args) 20 { 21 int applenum = 5; 22 string sapple = "你是我的小苹果!"; 23 Apple apple=new Apple(); 24 apple.Applenum(applenum, sapple); 25 apple.Applenum(applenum); 26 apple.Applenum(); 27 Console.ReadKey(); 28 }
例如:
通过重写实现编译时多态
1 class Apple 2 { 3 public virtual void Applenum() //创建虚方法 4 { 5 Console.WriteLine("苹果!"); 6 } 7 } 8 class BigApple:Apple //BigApple类继承于Apple 9 { 10 public override void Applenum() //使用override重写方法 11 { 12 Console.WriteLine("大苹果!"); 13 } 14 } 15 static void Main(string[] args) 16 { 17 Apple apple=new Apple(); //创建Apple实例 18 apple.Applenum(); 19 BigApple bigApple=new BigApple(); //创建BigApple实例 20 bigApple.Applenum(); 21 Console.ReadKey(); 22 }