黑马程序员技术交流社区

标题: 构造函数可以继承吗? [打印本页]

作者: 李君言    时间: 2013-5-15 21:41
标题: 构造函数可以继承吗?
本帖最后由 李君言 于 2013-5-16 21:17 编辑

class Father
{
    public Father() //无参的
     {
     }
     public Father(string Name) //有参的
     {
     this.name = Name;
     }
    string name;
}

class Son : Father
{

}

static void Main(string[] args)
{
Son s = new Son("张三");  //这里出错
}

构造方法能被子类继承吗?或者调用吗?该怎么用,谢谢!

作者: 崔宏奎    时间: 2013-5-15 21:50
本帖最后由 崔宏奎 于 2013-5-15 21:52 编辑

{:soso_e154:}~~~
作者: 曾大鹏    时间: 2013-5-15 21:59
构造函数不能被继承。。
作者: 韩秀山    时间: 2013-5-15 22:01
构造方法是每个类特有的。不能被继承,如果想要使用父类的构造方法。使用super();
构造方法和类名相同,想要使用有参构造,必须要创建。
作者: SOAR    时间: 2013-5-15 22:10
1.你的main函数写的就不对,无论怎么都会报错。
2.如果没有显示的为一个类定义构造方法,则系统会为该类定义一个默认的构造方法。
3.子类的构造方法的必须调用其直接父类的构造方法,而且该调用语句必须是当前定义的类的构造方法的第一条语句,其调用格式是
super (调用参数列表),如果在当前定义的构造方法中没有显示写上调用父类构造方法的语句,则java虚拟机一般会自动在当前定义的类的构造方法的第一条语句前自动的隐式的添加调用不含任何参数的直接父类构造方法的语句。这时需要注意的是,如果直接父类没有不含任何参数的构造方法,则编译时会报错。
4.你写的这个Son类中没有定义构造方法,所以系统会为它添加这样一个构造方法public Son(){
super()
};
所以你只能调用你这个默认的构造方法。
作者: 郑丹丹1990    时间: 2013-5-16 07:49
构造函数和析构函数都不会被继承。
作者: 葛杨杨    时间: 2013-5-16 11:57
不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。
继承(extends)的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为反正每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了。

估计是你对“构造函数”的意义本身不理解,“调用”一个类有“继承”和“组合(说白了new 一个类)”两种方式,当你“调用”一个类的时候就会“自动运行”它的“构造函数”。
作者: 崔宏奎    时间: 2013-5-16 12:30
可以调用基类的构造函数:
  1. class Father
  2. {
  3.     public Father() //无参的
  4.      {
  5.      }
  6.      public Father(string Name) //有参的
  7.      {
  8.      this.name = Name;
  9.      }
  10.     string name;
  11. }

  12. class Son : Father
  13. {
  14.     //增加一个属性
  15.     public int Age{set;get;}
  16.     //无参构造函数
  17.     public Son(){}
  18.     //带一个参数的构造函数,调用基类
  19.     public Son(string Name):base(Name){}
  20.     //新增一个构造函数
  21.     public Son(string Name,int age):base(Name){this.Age=age;}
  22. }

  23. static void Main(string[] args)
  24. {
  25. Son s = new Son("张三");
  26. }
复制代码

作者: 吃肉的小浣熊    时间: 2013-5-16 17:23
可以被继承,可以被调用,但是 访问修饰符一定是public共有的,私有的private不能被继承,调用
作者: 乔红超    时间: 2013-5-16 18:40
好像不能吧,在调用基类的构造函数的时候要用Base方法。如下:
class Father
{
    public Father()
     {
     }
     public Father(string Name)
     {
     this.name = Name;
     }
    string name;
}

class Son : Father
{
    public int Age;
    public Son(){}
    public Son(string Name):base(Name){}
    public Son(string Name,int age):base(Name){this.Age=age;}
}

static void Main(string[] args)
{
Son s = new Son("张三");
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2