继承
继承是面向对象程序设计的最重要的概念之一,继承允许我们根据一个类来定义另外一个类,这使得创建和维护应用程序更容易,同时也有利于代码的重用和节省开发时间。
语法:
[访问修饰符] 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("你好,我是记者");
}
}