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