A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李君言 中级黑马   /  2013-5-15 21:41  /  2968 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李君言 于 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("张三");  //这里出错
}

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

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 崔宏奎 于 2013-5-15 21:52 编辑

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

估计是你对“构造函数”的意义本身不理解,“调用”一个类有“继承”和“组合(说白了new 一个类)”两种方式,当你“调用”一个类的时候就会“自动运行”它的“构造函数”。
回复 使用道具 举报
可以调用基类的构造函数:
  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. }
复制代码
回复 使用道具 举报
可以被继承,可以被调用,但是 访问修饰符一定是public共有的,私有的private不能被继承,调用
回复 使用道具 举报
好像不能吧,在调用基类的构造函数的时候要用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("张三");
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马