zoukankan      html  css  js  c++  java
  • C#_基础_继承以及关键字new(二十一)

    基类的:

    把这几个类中重复的内容提取出父类,重复的成员(字段,方法),我们可以抽取重复的成员,单独的封装到这个类中,这些类继承这个父类,这个类就是父类也叫这几个类基类,这些类称为派生类(子类)。

    子类可以从父类中继承什么?

     1  public class Person
     2     {
     3 
     4       public Person()
     5         {
     6             Console.WriteLine("子类会默认调用父类的无参构造函数,初始化数据");
     7         }
     8 
     9         public Person(string name, int age, char gender)
    10       {
    11           this.Name = name;
    12           this.Age = age;
    13           this.Gender = gender;
    14 
    15       }
    16 
    17 
    18         ~Person()
    19           {
    20               Console.WriteLine("父类析构函数");
    21           }
    22        
    23 
    24         private   string _name;
    25         public string Name
    26         {
    27             get { return _name; }
    28             set
    29             {
    30                 _name = value;
    31             }
    32         }
    33 
    34        
    35 
    36         private int _age;
    37 
    38         public int Age
    39         {
    40             get { return _age; }
    41             set { _age = value; }
    42         }
    43 
    44         private char  _gender;
    45 
    46         public char  Gender
    47         {
    48             get { return _gender; }
    49             set { _gender = value; }
    50         }
    51 
    52         
    53         
    54         public  void Eat()
    55         {
    56             Console.WriteLine("Person Eat");
    57         }
    58 
    59 
    60     }
    61 
    62 
    63 
    64     public class Student:Person
    65     {
    66         public Student()
    67         {
    68             Console.WriteLine("Student");
    69         }
    70         ~Student()
    71         {
    72             Console.WriteLine("子类析构函数");
    73         }
    74      
    75 
    76       
    77         private int _id;
    78 
    79         public int ID
    80         {
    81             get { return _id; }
    82             set { _id = value; }
    83         }
    84     }
     1         static void Main(string[] args)
     2         {
     3             //1.测试继承  子类对象都可以获取到父类的public protected修饰的属性和方法,不能获取到private修饰的字段
     4             Student s = new Student();
     5             s.Age = 10;
     6             int age = s.Age;
     7 
     8             s.Eat();
     9 
    10             Console.ReadKey();
    11       
    12         }

    结论:子类从父类中继承了public,protected 修饰的成员,不能继承private修饰的成员

    子类有没有继承父类的构造函数?

       不会继承父类构造函数。

      通过端点方法,F11查看创建创建对象的过程。

      Student s = new Student(); 先执行父类构造函数,执行父类构造函数,给父类在堆中创建父类对象,

      子类会默认调用父类的无参数构造函数,初始化数据,所以父类一定要有无参数构造函数。

      注意:默认会有无参数构造函数,如果有无参数构造函数,就没有无参数构造函数,如果父类中没有无参数构造函数怎么解决?

          1.给父类中手写一个无参数构造(子类创建对象默认调用)

         2. 通常会用base()关键字显式调用父类的有参数构造方法

      

     1  public class Person
     2     {
     3 
     4       public Person()
     5         {
     6             Console.WriteLine("子类会默认调用父类的无参构造函数,初始化数据");
     7         }
     8 
     9         public Person(string name, int age, char gender)
    10           {
    11               this.Name = name;
    12               this.Age = age;
    13               this.Gender = gender;
    14 
    15           }
    16 }
    17 
    18         public Student(string name,int age, char gender, int id):
    19             base(name,age,gender)  //调用父类的有参数构造
    20         {
    21             this.ID = id; //子类中特有的属性
    22 
    23         }

    Tip: 可以通过右键类脚本,查看类图,查看各个类之间的关系。

    继承的特点:

      1.单继承,也叫单根性。就是只能继承一个父类

      2.传递性。可以连续继承

         Student类 继承 Man类, Man类继承 Person类这样可以一直继承下去。

         那么子类Student类中就同时有了Man,Person中继承到的protected,public修饰的成员

    如果子类中有父类中相同的方法怎么解决,怎么调用?

      子类有和父类同名的成员,子类对象调用,优先调用子类自己的成员。

     1  class People
     2     {
     3         public void Run()
     4         {
     5             Console.WriteLine("父类");
     6         }
     7     }
     8 
     9      class  Doctor:People
    10     {
    11      
    12          public void Run()
    13          {
    14              Console.WriteLine("子类");
    15          }
    16 
    17 
    18        
    19     }
    20      class Progress
    21      {
    22          static void Main()
    23          {
    24              Doctor doc = new Doctor();
    25              doc.Run();  //输出结果 子类
    26              Console.ReadKey();
    27          }
    28      }

      

      子类中有和父类中有相同的属性方法,会出现这个提示:.

    加上new就可以了:那么new的作用是什么呢?

       

      关键字 new 做修饰符:作用:隐藏从父类继承过来的同名的成员 ,隐藏的结果就是子类调用不到父类对应的成员。

                  使用: 如果子类成员中有和父类相同的成员,会提示警告,子类隐藏了父类的成员,需要加上关键字new

  • 相关阅读:
    NodeJS系列~第一个小例子,实现了request.querystring功能
    JS~js里实现队列与堆栈
    最新CSS兼容方案
    js传真实地址 C:fakepath
    IE11的变化 navigator.userAgent中不再包含“MSIE”关键字
    看看该死的jquery.form.js的用法,不是个东西
    bootstrap模态框怎么传递参数
    方法的直接调用,反射调用
    IIS 7.5 配置伪静态
    TrippleDESCSPEncrypt 加密解密试试看
  • 原文地址:https://www.cnblogs.com/CeasarH/p/9202017.html
Copyright © 2011-2022 走看看