第一篇博文
今天又复习了一下面向对象的思想,为了加强记忆,所以把自己回顾的东西给记下来。
首先第一个面向对象的三大特征:封装、继承、多态
1:封装
何为封装,我的简单的理解封装就是打包,为了解决大项目的维护和管理。
2:继承
理解:继承其实就是拿来主义,将一个类库作为原始的模板,在其基础上拓展别的模板。
优点:解决了代码的冗余 。
特性:传递性
其中涉及到构造方法的调用问题,子类在调用自己的构造方法的时候会首先初始化父类的构造方法,但是不会初始化化一个父类的对象,至于为什么会初始化父类的构造方法,我理解的是,会首先初始化父类的字段。
里氏转换原则:
子类可以赋值给父类对象。
父类对象可以强制转换成对应的子类对象。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 继承 8 { 9 public class BaseFun 10 { 11 } 12 public class Fun:BaseFun 13 { 14 } 15 class Program 16 { 17 static void Main(string[] args) 18 { 19 //子类可以赋值给父类 20 BaseFun bs = new Fun(); 21 //父类可以强制装换成对应的子类 22 Fun fun1 = (Fun)bs; 23 //is的使用 24 Console.WriteLine(fun1 is BaseFun);//True 25 Console.WriteLine(fun1 is Fun);//True 26 Console.WriteLine(fun1 is object);//True 27 //as的使用 28 Fun fun2 = fun1 as Fun; 29 Console.WriteLine("ok"); 30 Console.Read(); 31 } 32 } 33 }
3:多态
定义:对象在调用同一个方法表现出来的多种种状态
a:通过重写基类的方法实现多态:父类统一调用,子类来实现。
b:通过隐藏基类的方法实现多态。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 多态 { public class BaseFun { public virtual void Eat() { Console.WriteLine("我是BaseFun"); } } public class Fun:BaseFun { public override void Eat() { Console.WriteLine("我是Fun"); } } public class Fun1:BaseFun { public new void Eat() { Console.WriteLine("我是Fun1"); } } class Program { static void Main(string[] args) { BaseFun bs = null; bs = new Fun(); bs.Eat(); Fun1 fun1 = new Fun1(); fun1.Eat(); BaseFun bs1 = fun1; bs1.Eat(); Console.Read(); } } }
浙公网安备 33010602011771号