派生类的构造方法
2009-10-28 10:57
85 查看
如果没有显示的为类定义任何构造函数,编译器就会为类定义默认的构造函数,反过来,如果为类定义的任何构造函数,编译器都不会再定义默认的构造函数。
如果在一个层次的类中,没有为类定义任何构造函数,那么在实例化一个类时,编译器解决这些层次结构的构造问题顺序是这样的:
首先 编译器找到要实例化的类的构造函数,这个构造函数再找到其直接基类的构造函数,这个直接基类的构造函数再找到他的直接基类的构造函数。。。。。。。一直找到Object类为止,因为Object没有基类了,这样就执行Object的构造函数,执行完后返回,再执行其直接子类的构造函数,执行完再返回。。。。。。这样就像现今政府机构下达命令一样,一层层下发,直到实例化那个类为止。因为从头到尾调用的都是编译器生成的构造函数(称为默认构造函数),所以整个过程都是编译器在忙。
如果我在这个层次的类中手动为一个类添加了一个无参数的构造的话,(因为编译器不会去生成默认的构造函数了) ,编译器做的工作和上面一样,层层上报,再层层下发,只不过用我的构造函数替换了编译器的默认构造函数而已。
如果我在这个层次的类中手动为一个类添加了一个带参数的构造函数的话,(编译器同样不会去生成默认的构造函数,好像只要你侵犯他的构造领域,他就不去管了),这样编译时当然会报错。 因为其下层构造函数要在这里找一个无参数的构造函数发现找不到了。怎么办?
指定派生类在基类中查找的构造函数
class a
{
public string name;
//public a()
//{
// name = "调用了无参数的构造";
// Console.WriteLine(name);
//}
public a(int i)
{
name = "调用了有参数的构造"+"/t"+i;
Console.WriteLine(name);
}
}
class b : a
{
public decimal salary;
public b():base(3)
{
salary = 5000;
}
}
如果在一个层次的类中,没有为类定义任何构造函数,那么在实例化一个类时,编译器解决这些层次结构的构造问题顺序是这样的:
首先 编译器找到要实例化的类的构造函数,这个构造函数再找到其直接基类的构造函数,这个直接基类的构造函数再找到他的直接基类的构造函数。。。。。。。一直找到Object类为止,因为Object没有基类了,这样就执行Object的构造函数,执行完后返回,再执行其直接子类的构造函数,执行完再返回。。。。。。这样就像现今政府机构下达命令一样,一层层下发,直到实例化那个类为止。因为从头到尾调用的都是编译器生成的构造函数(称为默认构造函数),所以整个过程都是编译器在忙。
如果我在这个层次的类中手动为一个类添加了一个无参数的构造的话,(因为编译器不会去生成默认的构造函数了) ,编译器做的工作和上面一样,层层上报,再层层下发,只不过用我的构造函数替换了编译器的默认构造函数而已。
如果我在这个层次的类中手动为一个类添加了一个带参数的构造函数的话,(编译器同样不会去生成默认的构造函数,好像只要你侵犯他的构造领域,他就不去管了),这样编译时当然会报错。 因为其下层构造函数要在这里找一个无参数的构造函数发现找不到了。怎么办?
指定派生类在基类中查找的构造函数
class a
{
public string name;
//public a()
//{
// name = "调用了无参数的构造";
// Console.WriteLine(name);
//}
public a(int i)
{
name = "调用了有参数的构造"+"/t"+i;
Console.WriteLine(name);
}
}
class b : a
{
public decimal salary;
public b():base(3)
{
salary = 5000;
}
}
相关文章推荐
- 派生类的构造方法以及修饰符的作用
- C#高级(五)继承,派生类,派生类的构造方法
- c#基础-继承,派生类,派生类的构造 方法
- C#高级(五)继承,派生类,派生类的构造方法
- C#高级(五)继承,派生类,派生类的构造方法
- 例4.6 当基类含有参数的构造函数,派生类构造函数的构造方法
- 14--swift之派生类构造方法
- 13.4 Swift派生类构造方法的两段式构造
- JAVA——(2)OOP面向对象、封装、继承、多态、this、构造方法
- OC语言的构造方法的解析
- Java String类及常用构造方法
- 【Java认证:Java构造方法】
- Java多态--构造方法的内部方法多态
- 学习Java基础的一些知识(11)构造方法
- 派生类遮掩基类方法的一些总结
- java-深入构造方法
- 父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办?
- 黑马程序员------OC基础-----点语法、id、构造方法、Category、成员变量作用域
- ifstream构造方法,成员函数getline
- Java构造和解析Json数据的两种方法详解一