C#基础|面向对象之继承

 
面向对象的世界

在现实的世界里,发现事物可以进行分类,并且各个分类中又有这关系。
在面向对象的世界里,人们用类来模拟现实世界中的各种关系。
从大的范围来说,人属于人类,如果按照不同的身份将人类进行划分,又可以分为老师,医生,律师,学生等等。。。
如果要用编程来描述学生和老师这两种不同的身份
想到学生这种身份会有,学校,班级,成绩等特有的属性,当然还有作为人类共有的一些东西,比如,姓名,年龄,性别等。
作为老师这种身份会有,工资等特有的属性,也有一些和学生共同的东西,比如,姓名,年龄,性别等。
现在要编程描述学生和老师这两种身份,为了简便只讨论他们的一些属性
 
//学生类
class Student
{
//姓名属性
public string name
{
get;set;
}
public int age
{
get;set;
}
//分数属性,特有的
public double score
{
get;set;
}
}
 
//老师类
class Teacher
{
//姓名属性
public string name
{
get;set;
}
public int age
{
get;set;
}
//薪水属性,特有的
public double salary
{
get;set;
}
}
写完一看,学生类和老师类有代码重复的现象,这种事绝对不能忍。
 
继承(发生在类与类之间的关系)

将共有的属性,将其分离出来,单独写成一个类
//人类
class Person
{
//姓名属性
public string name
{
get;set;
}
//年龄属性
public int age
{
get;set;
}
}
 
现在让Person类分别与Student类,Teacher类发生关系。
//老师类
class Teacher: Person
{
public double salary
{
get;set;
}
}
上述代码,Teacher类的姓名、年龄属性将从Person获得,将这种行为称为继承。
Student继承Person类代码省略。
 
继承中的构造函数

 
//person类
class Person
{
//name属性
public string name
{
get;set;
}
//age属性
public int age
{
get;set;
}
Person(string _name,string _age)
{
this.name = _name;
this.age = _age;
}
}
//Student类继承自Person类
class Student : Person
{
public int score
{
get;set;
}
Person(string _name,string _age, string _score)
{
this.name = _name;
this.age = _age;
this.score = _score;
}
}
上述代码将会报错
 
利用base关键字调用父类构造函数

将student类改成如下形式
class Student : Person
{
public int score
{
get;set;
}
//你用base关键字调用父类中的构造函数
Person(string _name,string _age, string _score) : base(_name, _age)
{
this.score = _score;
}
}
 
继承中的术语

父类:上面的例子中person就是父类。你也可以说是基类
子类:上面的例子中student,teacher就是子类,从person类派生而来。你也可以说是派生类
单根性:继承具有单根性,指一个类只能继承一个类。
传递性:A继承了B,B继承了C,C的属性和方法,在A中也得到继承了。
结束语

 
写这篇随笔的目的是出于锻炼自己的表达能力和思维逻辑能力的,若给你后面的学习带来误解请谅解。
 
感谢博客园
感谢黑马训练营
2014/1/16 晚7点
posted @ 2014-01-21 17:16  艾斯泽  阅读(366)  评论(0编辑  收藏  举报