继承:代码文字结合理解

class Program
{
static void Main(string[] args)
{
//Student s = new Student(); //Driver d = new Driver();
Student s = new Student("学生", , '男', );
}
} /// <summary>
/// 父类——人类
/// </summary>
public class Person
{
private string _name; public string Name
{
get { return _name; }
set { _name = value; }
} private int _age; public int Age
{
get { return _age; }
set { _age = value; }
} private char _gender; public char Gender
{
get { return _gender; }
set { _gender = value; }
} public void CHLSS()
{
Console.WriteLine("吃喝拉撒睡");
} public Person(string name, int age, char gender)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
} public Person()
{ }
} /// <summary>
/// 子类——学生
/// </summary>
public class Student : Person
{ public Student(string name, int age, char gender, int id)
: base(name, age, gender)
{
//this.Name = name;
//this.Age = age;
//this.Gender = gender;
this.Id = id;
} private int _id; public int Id
{
get { return _id; }
set { _id = value; }
} public void Study()
{
Console.WriteLine("学生会学习");
}
} /// <summary>
/// 子类——老师
/// </summary>
public class Teacher :Person
{ public Teacher(string name, int age, char gender, double salary)
: base(name, age, gender)
{
this.Salary = salary;
} private double _salary;
public double Salary
{
get { return _salary; }
set { _salary = value; }
}
public void Teach()
{
Console.WriteLine("老师会讲课");
}
} /// <summary>
/// 子类——司机
/// </summary>
public class Driver:Person
{ public Driver(string name, int age, char gender, int driveTime)
: base(name, age, gender)
{
this.DirveTime = driveTime;
} private int _dirveTime;
public int DirveTime
{
get { return _dirveTime; }
set { _dirveTime = value; }
}
public void Drive()
{
Console.WriteLine("司机会开车");
}
}

我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,
单独的封装到一个类中,作为这些类的父类。
Student、Teacher、Driver 子类 或 派生类
Person 父类  或  基类
问题:子类继承了父类,那么子类从父类那里继承过来了什么?
首先,子类继承了父类的属性和方法,但是子类并没有继承父类的私有字段。
问题:子类有没有继承父类的构造函数?
答:子类并没有继承父类的构造函数,但是。子类会默认的调用父类无参数的构造函数,
创建父类对象,子类可以使用父类中的成员。
所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,
子类就调用不到了,所以子类会报错。
解决办法:
1)、在父类中重新写一个无参数的构造函数。
2)、在子类中显示的调用父类的构造函数,使用关键字:base()

注意:子类对象可以调用父类中的成员,但是父类对象永远都只能调用自己的成员。

里氏转换
1)、子类可以赋值给父类
2)、如果父类中装的是子类对象,那么可以讲这个父类强转为子类对象。

is:表示类型转换,如果能够转换成功,则返回一个true,否则返回一个false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回一个null

最新文章

  1. .NET invoke NetSuite Restlet
  2. let和expr比较
  3. python flask model 序列化
  4. Android图片圆角效果
  5. [转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】
  6. Web API 返回json文件的2中不用方式
  7. Silverlight中的拖拽实现的图片上传
  8. iOS开发中视图控制器ViewControllers之间的数据传递
  9. java 如何判断操作系统是Linux还是Windows
  10. 【一天一道LeetCode】#63. Unique Paths II
  11. 关于SQL Server 数据库归档的一些思考和改进
  12. 图文详解互联网根基之HTTP
  13. saltstack学习之一:服务架构以及相关配置安装运行
  14. Zookeeper单机伪集群
  15. SQL Server服务器CPU爆高解决
  16. Mysql Federated For Windows
  17. Windows核心编程:第13章 内存体系结构
  18. Java对中文进行排序
  19. 多线程(模拟买票)-----java基础知识总结
  20. 如何在Datatable中取得每列的数据列宽度

热门文章

  1. Hibernate怎么用
  2. BZOJ1800_fly飞行棋_KEY
  3. outer join test
  4. 基于阿里云服务器Linux系统安装配置Redis
  5. lesson 15 Fifty pence worth of trouble
  6. jQuery筛选器及对DOM修改(学习笔记)
  7. [Clr via C#读书笔记]Cp10属性
  8. Python基础框架和工具
  9. docker创建redis镜像
  10. UVa 1586 - Molar Mass - ACM/ICPC Seoul 2007 - C语言