zoukankan      html  css  js  c++  java
  • 初始继承和多态 三(补充)

    一:本章目标

    ①:理解继承的概念

    ②:使用继承建立父类和子类以及继承的传递性、单根性

    ③:访问修饰符

    ④:多态的概念

    ⑤:会使用虚方法实现多态

     

    二:所谓继承:

    在C#中,如果一个类后面通过冒号又跟了另外一个类,那么我们就称冒号前面的类为子类,冒号后面的类为父类。这种书写类的方式放映出来的关系就称为类的继承关系。

     

    1、子类:派生类

    父类:基类或者超类

    2、满足什么条件的类可以使用继承??

    满足is a关系的两个类可以使用继承。

    例如:

     

         经理is a a 员工

     

         程序员  is a 员工

     

         学生 is  a Person

     


    继承的优点:减少代码冗余,实现代码复用

     

    ☆继承模式下子类构造,背后到底发生了什么???

    eg:

    创建出Animal(父类)、Dog(子类)

    关键代码如下:

    父类:

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Chap06
    {
        public class Animal
        {
            //定义自动属性 年龄和姓名
            public int Age { get; set; }
    
            public string Name { get; set; }
    
            //无参构造
            public Animal()
            { 
            
            }
    
            //带参构造
            public Animal(int age,string name)
            {
                this.Age = age;
                this.Name = name;
            }
        
        }
    }
    复制代码

    子类:

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Chap06
    {
      public  class Dog:Animal
        {
    
            public string Color{ get; set; }
    
            //无参构造
            public Dog()
            { 
            
            }
            //带参构造
            public Dog(int age,string name,string color)
            {
                this.Age = age;
                this.Name = name;
                this.Color = color;
            
            }
    
            public void Eat()
            {
                Console.WriteLine("Dog Eat Meat Very Happy!");
               
            }
        }
    }
    复制代码

    Main方法:

    复制代码
    namespace Chap06
    {
        class Program
        {
            static void Main(string[] args)
            {
                //创建Dog对象
                Dog dog = new Dog();
                //调用子类中的Eat()方法
                dog.Eat();
    
                Console.ReadKey();
    
    
            }
        }
    }
    复制代码

    解析:

    如果我们想构建一个子类对象...

    1、进入子类构造方法名,但不进入子类构造的方法体

    2、跳转到父类构造方法名,接下来执行父类构造的方法体

    3、父类方法体执行完毕,跳转到子类方法体执行

    4、子类方法体执行完毕,跳转到Main函数,代表子类对象创建过程

     

     

    注:继承关系在类图中表示为一个箭头,箭头指向的是父类。

    子类可以继承父类的非私有成员

    一个子类只能有一个直接父类

    子类构造默认会调用父类的无参构造

    三:base关键字

    解析:

    ①:父类的实例

    ②:看成是调用父类的构造,只出现在子类构造后面

    ③:base(参数列表)父类带参构造的参数列表一致

    ④:相当于方法调用,不带有数据类型

     

    四:访问修饰符

    ①:Public:任何位置都能访问(方法,成员变量,类)

    ②:Private:只能当前类自身访问,出了类所在{}无法访问(方法,成员变量)

    ③:Protected:当前类和子类能访问及子类的子类(孙子类)(方法以及变量)

    ④:Internal:只能在当前程序集中使用

    三种访问修饰符对类成员的访问限制强度:Private>Protected>Public

    五:继承的特性:

    ①:传递性:

    如果一个类B继承自类A,而类C又继承类B,那么类C也可以访问到类A中非私有成员

     

    ②:单根性(C#不支持多继承 Java也不支持多继承)

     

     

    六:继承的价值

    01.模拟现实世界的关系

    02.便于重用和扩展已彻底测试的代码,且无需修改

    03.结构更清晰

    七:实现多态

    概念:

    不同的对象对于同一个操作,做出的响应不同,那么这种情况在面向对象编程中就称为多态。

    使用多态的目的:

    使用多态就是为了统一调用。

    实现多态的方式:

    ①:通过虚方法:

    实现多态的步骤:

    01.在父类中通过virtual关键字定义一个虚方法

    02.在子类中通过override关键字对父类中的虚方法进行重写

    03.调用的时候,调用的是子类的方法

     

    Main方法进行创建对象以及遍历集合:

    复制代码
    namespace Chap06多态
    {
        class Program
        {
            static void Main(string[] args)
            {
                Chinese chinese = new Chinese();
    
                American american = new American();
    
                Korea korea = new Korea();
    
                Person[] p =
                {
                chinese,american,korea
                
            };
                //遍历集合中的元素,调用对应子类中的Hello方法
                foreach (Person item in p)
                {
                    item.Hello();
                }
                Console.ReadLine();
            }
        }
    复制代码

     

  • 相关阅读:
    Luckysheet如何初始化含合并单元格的数据
    Luckysheet如何一键导入本地Excel
    又发现一款纯js开源电子表格Luckysheet
    Sublime Text3 注册码(Windows/Build 3176版本)| 开发工具
    Python初学者笔记(4)-简单的通讯录
    Python初学者笔记(3):输出列表中的奇数/奇数项,字符串中的偶数项,字符串大小写转换
    安装wampserver出现“The Program can't start because MSVCR110.dll is missing from your computer. Try reinstalling the program to fix this problem”
    python初学者笔记(2):阿拉伯数字转换成中文大写
    Python初学者笔记:打印出斐波那契数列的前10项
    JavaScript弹出对话框的三种方式
  • 原文地址:https://www.cnblogs.com/SFHa/p/8780008.html
Copyright © 2011-2022 走看看