c#面向对象程序设计——类的继承

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、当类的成员不使用访问修饰符时,语法默认成员不可访问。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值