面向对象的世界
在现实的世界里,发现事物可以进行分类,并且各个分类中又有这关系。
在面向对象的世界里,人们用类来模拟现实世界中的各种关系。
从大的范围来说,人属于人类,如果按照不同的身份将人类进行划分,又可以分为老师,医生,律师,学生等等。。。
如果要用编程来描述学生和老师这两种不同的身份
想到学生这种身份会有,学校,班级,成绩等特有的属性,当然还有作为人类共有的一些东西,比如,姓名,年龄,性别等。
作为老师这种身份会有,工资等特有的属性,也有一些和学生共同的东西,比如,姓名,年龄,性别等。
现在要编程描述学生和老师这两种身份,为了简便只讨论他们的一些属性
//学生类
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点