Java里子类调用父类构造方法问题

原创 2015年11月18日 23:06:49

 在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?    

   答案如下:    

    当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以:    

     第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法,所谓默认的构造方法,就是没有参数的构造方法,但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是在子类构造方法中我们并没有显示的调用基类的构造方法,就是没写,如:super(); 并没有这样写,但是这样就会调用父类没有参数的构造方法,如果父类中没有没有参数的构造方法就会出错。    

     第二个规则:如果子类的构造方法中没有显示的调用基类构造方法,则系统默认调用基类无参数的构造方法注意:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有默认无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数。

  

复制代码
 1 //当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法。
 2 class Animal{
 3   private String name;
 4   
 5   //如果你定义一个新的构造方法
 6   public Animal(String name) {
 7     this.name = name;
 8   }
 9 }
10 
11 public Dog extends Animal{
12   
13   //这时你就要显示的调用父类的构造方法,因为子类默认调用的是父类的
14   //无参构造方法Animal()
15   public Dog(){
16     super("小狗");  //显示调用父类的有参构造方法
17 
18     ....  //子类的构造方法处理
19   }
20 }
21 
22 //当然,如果你在父类里面把无参的构造方法,显示的写出来了,比如:
23 class Animal{
24   private String name;
25 
26   //无参的构造方法
27   public Animal() {
28     .....  //处理
29   }
30   
31   /*
32   如果你定义一个新的构造方法,那么在子类的构造方法中,就可以不用显示的调用父类的构造方法,因为子类有个无参的构造方法,
33   子类在构造方法中会自动调用父类已经定义的无参构造方法。
34   */
35   public Animal(String name) {
36     this.name = name;
37   }
38 }
复制代码

总结:不过一般的,在父类中使用了构造方法的重载,在子类中就可以根据需要,调用相应的父类构造方法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java中子类与父类的构造方法的调用关系

        在 Java 中,无论是 explicit 还是 implicit 方式,都要求在子类的构造方法中调用其父类的构造方法。如果父类无构造方法(其实是一个默认无参的构造方法),那么子类的构...
  • javafuns
  • javafuns
  • 2006年12月17日 16:48
  • 9789

java中子类调用父类的构造方法

在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?    答案如下:      当你new一个子类对象的时候,必须首...
  • u010102951
  • u010102951
  • 2014年11月21日 18:40
  • 4595

java中实例化子类时会不会调用父类的构造方法?

子类不会继承父类的构造方法(这里说的不能继承是说,构造方法不能在子类中被覆写,有时候说的“继承”父类的构造方法是说子类的构造方法调用父类的构造方法。),但是子类在实例化对象时:如果子类的构造器没有显示...
  • fucktester
  • fucktester
  • 2017年04月17日 22:10
  • 1342

为什么java的子类中必须调用父类的构造方法

子类继承父类的字段和方法。 你想那么子类中从父类继承的字段,要谁来初始化呢? 父类中有这些字段的初始化方式,所以最好的选择就是用父类的构造方法。 设计者,可能是这么考虑的。 再...
  • y_dzaichirou
  • y_dzaichirou
  • 2017年02月08日 02:54
  • 654

Java继承,子类默认在构造函数中用super()调用父类构造函数

1.子类继承父类的方法属性,并重写父类的方法,子类修饰符不能比父类方法的修饰符的范围狭窄。 Protect 与 默认 区别: protected :成员 本类和子类可以访问。【其他类不可以使用(即使...
  • yingtian648
  • yingtian648
  • 2016年06月02日 08:54
  • 3884

java this关键字在父子类构造方法中的运用

今天在学习的时候,遇见一个很有趣的代码,结果就是自己本来准备看电影的时间全部用来解读这段话代码了。一直在索取,所以今天也想分享一下。public class Father { private i...
  • gxzzxj
  • gxzzxj
  • 2016年07月18日 22:16
  • 1161

子类继承和调用父类的构造方法

1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法,. 2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。 ...
  • woshimayongheng
  • woshimayongheng
  • 2013年11月01日 17:40
  • 4165

C++关于子类调用父类的构造方法的问题

最近一个小问题甚是迷惑我,让我思考了很久,最后做了一个实验,结果一下思路就通了,所以呢,我们如果对于一个问题不是很懂,不妨自己去验证一下,你会得到意想不到的结果,今天我们就来谈一下在子类调用父类构造方...
  • dckandcqq
  • dckandcqq
  • 2017年05月22日 15:15
  • 296

java中关于子类实例化时调用父类无参构造方法的问题

java中子类在实例化的时候调用父类的无参构造方法容易混淆的大致分以下几种情况: 1、子类和父类同时具有有参和无参的构造方法,子类有参构造方法中第一行写的有super.(xx),且子类实例化...
  • hw20070575
  • hw20070575
  • 2016年03月02日 10:39
  • 3603

【java 构造函数】为什么子类一定要访问父类中的构造函数

原因: 子类的所有构造函数中的第一行,其实都有一条隐身的语句super(); 解释: super()表示父类的构造函数并会调用于参数相对应的父类中的构造函数。子类中,它在调用父类中空参数的构造函数...
  • YoungStar70
  • YoungStar70
  • 2017年03月09日 08:37
  • 935
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java里子类调用父类构造方法问题
举报原因:
原因补充:

(最多只允许输入30个字)