5.1继承概述:
继承:是指子类可以沿用父类的某些行为和特征。通过继承,子类自动拥有了父类可被继承的字段、属性、方法等。缺点不能除去已经继承的成员,在继承中对于父类的属性和方法子类只能选择接受
代码示例:
//动物类
class Animal{
private string name;//动物名称
//封装name字段
public string Name{
get{return name;}
set{name=value;}
}
//叫喊方法
public void Sound(){
Console.WriteLine("{0}发出了叫声。",Name);
}
}
//鸟类继承动物类
//:表示继承关系
class Bird:Animal{
private int wing;//翅膀数量
public int Wing{
get{return wing;}
set{wing=value;}
}
}
//创建一只鸟,并调用其叫喊方法
static void Main(string[] args){
Bird bird=new Bird();
bird.Name="麻雀";//继承于动物类的属性
bird.Sound();//继承于动物类的方法
}
5.2继承的实现:
继承的特性:
1、继承具有传递性。
2、继承的单根性。一个类只能有一个父类,但可以有多个子类。
3、成员的访问性。除构造方法外的其他成员,无论定义为public还是private都能被继承,只不过定义为private的成员不能被直接访问。子类是对父类的扩展,可以在子类中新增成员,但不能去除已继承的成员。子类可以通过声明与父类成员相同名称的成员来隐藏父类的成员。
c#的继承运用:
1、构造方法:在c#中,子类会先隐式调用父类的无参构造方法,再调用自身的构造方法。如果父类没有无参构造方法则提示错误。
代码示例:
//动物类
class Animal{
private string name;//动物名称
public Animal(){
Console.WriteLine("这是动物类的构造方法");
}
//封装name字段
public string Name{
get{return name;}
set{name=value;}
}
//叫喊方法
public void Sound(){
Console.WriteLine("{0}发出了叫声。",Name);
}
}
//鸟类继承动物类
//:表示继承关系
class Bird:Animal{
public Bird(){
Console.WriteLine("这是鸟类的构造方法");
}
}
//创建鸟类对象
static void Main(string[] args){
Bird bird=new Bird();
}
this和base关键字:
语法:
this();访问自身的构造方法。
this.成员名称:访问自身成员。
注意:父类要有一个无参构造方法才能被继承,(声明的类系统会有一个午无参构造方法,只是不显示出来)。
this使用代码示例:先访问无参再访问有参
//动物类
class Animal{
private string name;//动物名称
public Animal(){
Console.WriteLine("这是动物类的无参构造方法");
}
public Animal(string name):this(){
this.Name=name;
Console.WriteLine("这是动物类的有参构造方法");
}
//封装name字段
public string Name{
get{return name;}
set{name=value;}
}
}
//创建动物类对象
static void Mian(string[] args){
Animal animal=new Animal("老虎");
}
语法:
base();在子类中访问父类构造方法。
base.成员名称:在子类中访问父类成员。
注意:父类有参方法调用时不会调用无参方法。
base使用代码实例:先访问父类的无参方法,再访问父类的有参,最后访问自身的构造方法
class Animal{
private string name;//动物名称
public Animal(){
Console.WriteLine("这是动物类的无参构造方法");
}
public Animal(string name):this(){
this.Name=name;
Console.WriteLine("这是动物类的有参构造方法");
}
//封装name字段
public string Name{
get{return name;}
set{name=value;}
}
//鸟类继承动物类
//:表示继承关系
class Bird:Animal{
public Bird(string name):base(name){
Console.WriteLine("这是鸟类的有参构造方法");
}
}
//创建动物类对象
static void Mian(string[] args){
Bird bird=new Bird("大雁");
}
is-a关系:在继承关系中,子类和父类满足“子类is-a父类”的关系
is-a关系代码实例:
//动物类
class Animal{
public Animal(){
Console.WriteLine("这是动物类的构造方法");
}
}
//鸟类继承动物类
class Bird:Animal{
public Bird(){
Console.WriteLine("这是鸟类的构造方法");
}
}
static void Mian(string[] args){
Animal animal=new Bird();
}
5.3访问修饰符:
c#中共有五种访问修饰符:public、private、protected、internal和protected internal,
它们的访问权限从大到小排列: public > protected > > private(可访问性相反).
访问修饰符说明:
访问修饰符 | 说明 |
---|---|
public | 公有的,访问不受限制 |
private | 私有的,只能本类内部访问 |
protected | 受保护的,只能本类及其子类访问 |
internal | 内部的,只限制本项目内成员访问 |
protected internal | 内部保护的,只限制本项目或子类访问 |
注意:
1、可以用于修饰类的访问修饰符,无法显示声明为private、protected或protected internal。
2、在创建类的过程中,子类的访问权限不能高于父类,避免暴露父类成员。
3、当一个类不使用访问修饰符时,语法默认类的访问修饰符internal。
4、当类的成员不使用访问修饰符时,语法默认成员不可访问。