封装、继承、多态





字段:存储数据,访问修饰符应该设置为private是有的。
属性:保护字段,对字段的取值和赋值进行限定。
new关键字:一、                                                                     二、
1、在堆中开辟空间                                                隐藏父类成员
2、在开辟的空间中创建对象
3、调用对象的构造函数
this关键字:1、代表当前类对象
      2、调用自己的构造函数
构造函数:初始化对象,当创建对象的时候,会调用构造函数。
对字段的保护方法:
1、get()
2、set()
3、构造函数
字段、属性、方法
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _130_面对对象复习{class Program{static void Main(string[] args){Person p = new Person();//给对象的每个属性赋值的过程称之为对象的初始化p.Name = "张三";p.Gender = '男';p.Age = 19;p.SayHello();Console.ReadKey();}}}
Person:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _130_面对对象复习{class Person{// 字段、属性、构造函数、方法、接口private string _name;private char _gender;private int _age;public string Name { get => _name; set => _name = value; }public char Gender { get => _gender; set => _gender = value; }public int Age { get => _age; set => _age = value; }public Person(){}public Person(string name,int age,char gender){this.Name = name;this.Age = age;this.Gender = gender;}//使用this关键字调用自己的构造函数public Person(string name):this(name,0,' '){ }public void SayHello(){Console.WriteLine("{0}---{1}----{2}",this.Name,this.Gender,this.Age);}}}
继承
解决代码的冗余,实现多态,增加了代码的扩展性,便于维护。
1、单根性
2、传递性
子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数。可使用base调用父类的构造函数。
里式转换
1、子类可以赋值给父类
2、如果父类中装的是子类对象,那么可以将这个父类转换为子类对象。
is:表示类型转换,如果能够转换成功,则返回true否则返回false。
as:表示类型转换,如果能够转换,则返回对应的对象,否则返回null。 
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _131_里式转换复习{class Program{static void Main(string[] args){Person person = new Student(); //子类可以赋值给父类//Student s = (Student)person; //强转//Console.WriteLine(s.ID);Teacher t = person as Teacher; // t=null;if (person is Student){Console.WriteLine("可以转换");}else{Console.WriteLine("转换失败");}Console.ReadKey();}}}
Person.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _131_里式转换复习{class Person{public string Name{get;set;}}}
Student.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _131_里式转换复习{class Student:Person{public int ID{get;set;}}}
Teacher.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _131_里式转换复习{class Teacher:Person{public double Salary{get;set;}}}
多态
1、虚方法  virtual
2、抽象类  abstract
3、接口      interface 
简单工厂计算器:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _132_多态复习_简单工厂计算器{class Program{static void Main(string[] args){//多态:虚方法,抽象类,接口while (true){try{Console.WriteLine("请输入第一个数字");double n1 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入第二个数字");double n2 = Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入运算符");string opera = Console.ReadLine();CalFather cf = GetCal(opera, n1, n2);double result = cf.GetResult();Console.WriteLine("结果为:{0}", result);}catch{Console.WriteLine("请输入正确格式!!!");}}Console.ReadKey();}public static CalFather GetCal(string opera, double n1, double n2){CalFather cal = null;switch (opera){case "+":cal = new Add(n1, n2);break;case "-":cal = new Minus(n1, n2);break;case "*":cal = new Multiply(n1, n2);break;case "/":cal = new Divide(n1, n2);break;default:break;}return cal;}}}
CalFather.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _132_多态复习_简单工厂计算器{abstract class CalFather{public double NumberOne{get;set;}public double NumbweTwo{get;set;}public CalFather(double n1,double n2){this.NumberOne = n1;this.NumbweTwo = n2;}public abstract double GetResult();}}
Add.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _132_多态复习_简单工厂计算器{class Add : CalFather{public Add(double n1, double n2) : base(n1, n2){}public override double GetResult(){return this.NumberOne + this.NumbweTwo;}}}
Multiply.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _132_多态复习_简单工厂计算器{class Multiply:CalFather{public Multiply(double n1, double n2) : base(n1, n2){}public override double GetResult(){return this.NumberOne * this.NumbweTwo;}}}
Minus.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _132_多态复习_简单工厂计算器{class Minus:CalFather{public Minus(double n1, double n2) : base(n1, n2){}public override double GetResult(){return this.NumberOne - this.NumbweTwo;}}}
Divide.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _132_多态复习_简单工厂计算器{class Divide:CalFather{public Divide(double n1, double n2) : base(n1, n2){}public override double GetResult(){return this.NumberOne / this.NumbweTwo;}}}
