c#:继承之使用父类具有参数的构造函数对子类对象进行初始化
注意:
* 1.使用new 关键字对子类和父类中的相同的函数进行隐藏,这里隐藏的是父类的函数。在子类对象调用函数的时候首先调用过的是子类自己的函数,因为父类的函数已经被隐藏了。
* 2.继承的作用就是解决代码冗余的问题。object是所有的类的父类,也被称为所有的类的基类。
* 3.子类继承父类以后,当子类实例化对象的时候,子类同时也创建了一个父类的对象,用于对父类的构造函数的调用,子类实例化对象的时候首先调用的是父类的无参的构造函数。
* 4.如果父类创建了具有参数的构造函数,那么原来默认的无参的构造函数将会消失,所以子类必须使用函数base()方法,通过调用父类具有形式参数的构造函数,初始化子类的对象。
* 5.继承具有单根性,简单的理解就是每一个子类只能继承一个父类,
* 6.继承具有传递性,简单的理解就是父亲继承爷爷的东西,当儿子继承父亲以后,儿子也可以使用爷爷的东西。
代码:
*/using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _01继承
{
class Program
{
static void Main(string[] args)
{
// 在创建子类的对象的时候,将会在子类中产生父类的对象,目的是为了调用父类的构造函数。
Student s = new Student("张三", 12, '男');
Console.WriteLine("姓名:{0},性别:{1},年龄:{2}", s._name, s._gender, s._age);
s.SayHello();
Console.ReadKey();
}
}
//人类(基类,父类)
public class Person
{
public string _name;
public int _age;
public char _gender;
void CHLSS()
{
Console.WriteLine("吃喝拉撒睡");
}
public void SayHello()
{
Console.WriteLine("你好,我是人类");
}
//父类带有形式参数的构造函数,当书写类具有参数的构造函数的时候,原来的无参的构造函数则不存在了
public Person(string _name, int _age, char _gender)
{
this._name = _name;
this._age = _age;
this._gender = _gender;
}}
//学生类
public class Student : Person
{
//使用base函数调用父类的构造函数实现对子类的对象进行初始化
//如果不使用base()函数,在创建子类对象的时候首先调用的是父类的默认的构造函数(无参构造函数)
public Student(string _name, int _age, char _gender) : base(_name, _age, _gender)
{
}
void study()
{
}
public new void SayHello()
{ //子类和父类使用同名的函数,继承于父类的函数将会被隐藏,为了进一步区分,使用关键字new进行隐藏
Console.WriteLine("你好,我是学生类");
}
}
//老师类
public class Teacher : Person
{
public Teacher(string _name, int _age, char _gender) : base(_name, _age, _gender)
{
}
void teach()
{
}
public new void SayHello() //使用new关键字区别父类中和子类中的相同的函数
{
Console.WriteLine("你好,我是老师类");
}
// 司机类
public class Diver : Person
{
public Diver(string _name, int _age, char _gender) : base(_name, _age, _gender)
{
}
void DiverTime()
{
Console.WriteLine("我的驾驶时间很长时间了");
}
}
}
}
运行结果:
仅仅是个人理解,如有错误,请指正。