黑马程序员技术交流社区

标题: java中继承的问题 [打印本页]

作者: wangchao1686    时间: 2013-12-8 01:03
标题: java中继承的问题
子类继承父类后是否也继承了父类的构造函数了呢?看的视频上没有说到,在子类的构造函数中是通过super语句访问的父类的构造函数。既然子类继承了父类,子类就有了父类的属性和方法,构造函数作为一个函数,我想也应该被继承吧。可是我试了试,不通过super语句是没法调用父类的够函数的,求大神解答。
作者: 肖川    时间: 2013-12-8 12:27
不通过super依然可以调用父类的构造函数啊,例如下面所示,会打印
"fun run."
子类默认实现了父类的无参构造函数,自动调用了super语句。
  1. public class Demo6
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new Zi();
  6.         }
  7. }
  8. class Fu
  9. {
  10.         public Fu()
  11.         {
  12.                 System.out.println("fu run.");
  13.         }
  14. }

  15. class Zi extends Fu
  16. {

  17. }
复制代码

作者: wangchao1686    时间: 2013-12-8 12:33
你的意思我明白,但是这是隐式的super语句。还是通过super来调用的啊。
作者: Weix1992    时间: 2013-12-8 13:45
本帖最后由 Weix1992 于 2013-12-8 13:48 编辑
wangchao1686 发表于 2013-12-8 12:33
你的意思我明白,但是这是隐式的super语句。还是通过super来调用的啊。
  1. public class Demo6
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new Zi();
  6.         }
  7. }
  8. class Fu
  9. {
  10.         public Fu()
  11.         {
  12.                 System.out.println("fu run.");
  13.         }
  14. }

  15. class Zi extends Fu
  16. {

  17. }
复制代码


借用一下2L的代码,你每次new子类对象的时候,会调用子类的构造方法,但是其实子类的每个构造方法第一行都会默认有suepr()这句话,只不过是隐藏的,那么久是隐式调用
还有就是不能继承构造函数的原因之一,构造函数名字必须与类名保持一致,如果继承了那么久冲突了

作者: 绕世界流浪丶    时间: 2013-12-8 15:25
本帖最后由 绕世界流浪丶 于 2013-12-8 15:27 编辑

子类继承父类后,父类的所有方法和构造函数都可以重写,成员变量什么的都能通过super调用了。。。super调用的是方法里面的参数,方法是可以重写的。





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