封装、继承、多态

    image.png
    image.png
    image.png
    image.png

    image.png

    字段:存储数据,访问修饰符应该设置为private是有的。
    属性:保护字段,对字段的取值和赋值进行限定。
    new关键字:一、 二、
    1、在堆中开辟空间 隐藏父类成员
    2、在开辟的空间中创建对象
    3、调用对象的构造函数
    this关键字:1、代表当前类对象
    2、调用自己的构造函数
    构造函数:初始化对象,当创建对象的时候,会调用构造函数。
    对字段的保护方法:
    1、get()
    2、set()
    3、构造函数

    字段、属性、方法

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _130_面对对象复习
    7. {
    8. class Program
    9. {
    10. static void Main(string[] args)
    11. {
    12. Person p = new Person();
    13. //给对象的每个属性赋值的过程称之为对象的初始化
    14. p.Name = "张三";
    15. p.Gender = '男';
    16. p.Age = 19;
    17. p.SayHello();
    18. Console.ReadKey();
    19. }
    20. }
    21. }

    Person:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _130_面对对象复习
    7. {
    8. class Person
    9. {
    10. // 字段、属性、构造函数、方法、接口
    11. private string _name;
    12. private char _gender;
    13. private int _age;
    14. public string Name { get => _name; set => _name = value; }
    15. public char Gender { get => _gender; set => _gender = value; }
    16. public int Age { get => _age; set => _age = value; }
    17. public Person()
    18. {
    19. }
    20. public Person(string name,int age,char gender)
    21. {
    22. this.Name = name;
    23. this.Age = age;
    24. this.Gender = gender;
    25. }
    26. //使用this关键字调用自己的构造函数
    27. public Person(string name):this(name,0,' ')
    28. { }
    29. public void SayHello()
    30. {
    31. Console.WriteLine("{0}---{1}----{2}",this.Name,this.Gender,this.Age);
    32. }
    33. }
    34. }

    继承
    解决代码的冗余,实现多态,增加了代码的扩展性,便于维护。
    1、单根性
    2、传递性
    子类并没有继承父类的构造函数,而是会默认调用父类那个无参数的构造函数。可使用base调用父类的构造函数。

    里式转换
    1、子类可以赋值给父类
    2、如果父类中装的是子类对象,那么可以将这个父类转换为子类对象。
    is:表示类型转换,如果能够转换成功,则返回true否则返回false。
    as:表示类型转换,如果能够转换,则返回对应的对象,否则返回null。

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _131_里式转换复习
    7. {
    8. class Program
    9. {
    10. static void Main(string[] args)
    11. {
    12. Person person = new Student(); //子类可以赋值给父类
    13. //Student s = (Student)person; //强转
    14. //Console.WriteLine(s.ID);
    15. Teacher t = person as Teacher; // t=null;
    16. if (person is Student)
    17. {
    18. Console.WriteLine("可以转换");
    19. }
    20. else
    21. {
    22. Console.WriteLine("转换失败");
    23. }
    24. Console.ReadKey();
    25. }
    26. }
    27. }

    Person.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _131_里式转换复习
    7. {
    8. class Person
    9. {
    10. public string Name
    11. {
    12. get;
    13. set;
    14. }
    15. }
    16. }

    Student.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _131_里式转换复习
    7. {
    8. class Student:Person
    9. {
    10. public int ID
    11. {
    12. get;
    13. set;
    14. }
    15. }
    16. }

    Teacher.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _131_里式转换复习
    7. {
    8. class Teacher:Person
    9. {
    10. public double Salary
    11. {
    12. get;
    13. set;
    14. }
    15. }
    16. }

    多态
    1、虚方法 virtual
    2、抽象类 abstract
    3、接口 interface

    简单工厂计算器:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _132_多态复习_简单工厂计算器
    7. {
    8. class Program
    9. {
    10. static void Main(string[] args)
    11. {
    12. //多态:虚方法,抽象类,接口
    13. while (true)
    14. {
    15. try
    16. {
    17. Console.WriteLine("请输入第一个数字");
    18. double n1 = Convert.ToDouble(Console.ReadLine());
    19. Console.WriteLine("请输入第二个数字");
    20. double n2 = Convert.ToDouble(Console.ReadLine());
    21. Console.WriteLine("请输入运算符");
    22. string opera = Console.ReadLine();
    23. CalFather cf = GetCal(opera, n1, n2);
    24. double result = cf.GetResult();
    25. Console.WriteLine("结果为:{0}", result);
    26. }
    27. catch
    28. {
    29. Console.WriteLine("请输入正确格式!!!");
    30. }
    31. }
    32. Console.ReadKey();
    33. }
    34. public static CalFather GetCal(string opera, double n1, double n2)
    35. {
    36. CalFather cal = null;
    37. switch (opera)
    38. {
    39. case "+":
    40. cal = new Add(n1, n2);
    41. break;
    42. case "-":
    43. cal = new Minus(n1, n2);
    44. break;
    45. case "*":
    46. cal = new Multiply(n1, n2);
    47. break;
    48. case "/":
    49. cal = new Divide(n1, n2);
    50. break;
    51. default:
    52. break;
    53. }
    54. return cal;
    55. }
    56. }
    57. }

    CalFather.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _132_多态复习_简单工厂计算器
    7. {
    8. abstract class CalFather
    9. {
    10. public double NumberOne
    11. {
    12. get;
    13. set;
    14. }
    15. public double NumbweTwo
    16. {
    17. get;
    18. set;
    19. }
    20. public CalFather(double n1,double n2)
    21. {
    22. this.NumberOne = n1;
    23. this.NumbweTwo = n2;
    24. }
    25. public abstract double GetResult();
    26. }
    27. }

    Add.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _132_多态复习_简单工厂计算器
    7. {
    8. class Add : CalFather
    9. {
    10. public Add(double n1, double n2) : base(n1, n2)
    11. {
    12. }
    13. public override double GetResult()
    14. {
    15. return this.NumberOne + this.NumbweTwo;
    16. }
    17. }
    18. }

    Multiply.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _132_多态复习_简单工厂计算器
    7. {
    8. class Multiply:CalFather
    9. {
    10. public Multiply(double n1, double n2) : base(n1, n2)
    11. {
    12. }
    13. public override double GetResult()
    14. {
    15. return this.NumberOne * this.NumbweTwo;
    16. }
    17. }
    18. }

    Minus.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _132_多态复习_简单工厂计算器
    7. {
    8. class Minus:CalFather
    9. {
    10. public Minus(double n1, double n2) : base(n1, n2)
    11. {
    12. }
    13. public override double GetResult()
    14. {
    15. return this.NumberOne - this.NumbweTwo;
    16. }
    17. }
    18. }

    Divide.cs

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Threading.Tasks;
    6. namespace _132_多态复习_简单工厂计算器
    7. {
    8. class Divide:CalFather
    9. {
    10. public Divide(double n1, double n2) : base(n1, n2)
    11. {
    12. }
    13. public override double GetResult()
    14. {
    15. return this.NumberOne / this.NumbweTwo;
    16. }
    17. }
    18. }