继承
继承是面向对象程序设计的最重要的概念之一,继承允许我们根据一个类来定义另外一个类,这使得创建和维护应用程序更容易,同时也有利于代码的重用和节省开发时间。
语法:
[访问修饰符] Class 类名1(基类或父类)
{
···
}
[访问修饰符] Class 类名2(派生类或子类):类名1
{
···
}
object是所有类的基类。
//假设有一个基类Person,它的派生类是Student//基类public Class Person{private string _name;private int _age;private char _gender;}//派生类publuc Class Student:Person{private int _id;}
派生类从基类哪里继承了什么?
派生类继承了基类的属性和方法,但是并没有继承基类的私有字段。
派生类有没有继承基类的构造函数?
派生类没、有继承基类的构造函数,但是,派生类会默认的调用基类无参的构造函数,创建基类对象,让派生类可以使用基类的成员。所以,如果在基类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,派生类就调用不到了,所以派生类会报错。
解决方法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字**:base()**
继承的特性
1、继承的单根性:指的是一个子类只能有一个父类
2、继承的传递性:
//我叫zhang,我是一名篮球爱好者,我的爱好的打篮球,我今年18岁了,我是男生class Program{static void Main(string[] args){Reporter re = new Reporter(\"zhang\",18,\'男\',\"打篮球\");re.ReporterSayHello();Console.ReadKey();}}public class Person//基类{private string _name;private int _age;private char _gender;public string Name{get{return _name;}set{_name = value;}}public int Age{get{return _age;}set{_age = value;}}public char Gender{get{return _gender;}set{_gender = value;}}public Person(string name, int age, char gender){this.Name = name;this.Age = age;this.Gender = gender;}}public class Reporter : Person//派生类{private string _hobby;public string Hobby{get{return _hobby;}set{_hobby = value;}}public Reporter(string name, int age, char gender, string hobby): base(name, age, gender){this.Hobby = hobby;}public void ReporterSayHello(){Console.WriteLine(\"我叫{0},我是一名篮球爱好者,我的爱好是{1},我是{2}生,我今年{3}岁了\",Name,Hobby,Gender,Age);}}
new关键字
new关键字的作用:
1、创建对象
2、隐藏从基类哪里继承过来的同名的成员(同名隐藏),隐藏的后果就是派生类调用不到基类的成员
class Program{static void Main(string[] args){Reporter rep = new Reporter();rep.SayHello();rep.Text();Console.ReadKey();}}public class Person{private string _name;private int _age;private char _gender;public string Name{get{return _name;}set{_name = value;}}public int Age{get{return _age;}set{_age = value;}}public char Gender{get{return _gender;}set{_gender = value;}}public Person(){}public void SayHello(){Console.WriteLine(\"你好,我是人类\");}public void Text(){Console.WriteLine(\"测试\");}}public class Reporter : Person{private string _hobby;public string Hobby{get{return _hobby;}set{_hobby = value;}}public Reporter(){}public new void SayHello(){Console.WriteLine(\"你好,我是记者\");}}