Java中子类调用父类构造方法的问题分析_java

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

答案如下:   

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

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

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

复制代码 代码如下:

//当你没有使用父类默认的构造方法时,此时在子类的构造方法中就需要显示的调用父类定义的构造方法。
 class Animal{
   private String name;

   //如果你定义一个新的构造方法
   public Animal(String name) {
     this.name = name;
   }
 }

 public Dog extends Animal{

   //这时你就要显示的调用父类的构造方法,因为子类默认调用的是父类的
   //无参构造方法Animal()
   public Dog(){
     super("小狗");  //显示调用父类的有参构造方法

     ....  //子类的构造方法处理
   }
 }

 //当然,如果你在父类里面把无参的构造方法,显示的写出来了,比如:
 class Animal{
   private String name;

   //无参的构造方法
   public Animal() {
     .....  //处理
   }

   /*
   如果你定义一个新的构造方法,那么在子类的构造方法中,就可以不用显示的调用父类的构造方法,因为子类有个无参的构造方法,
   子类在构造方法中会自动调用父类已经定义的无参构造方法。
   */
   public Animal(String name) {
     this.name = name;
   }
 }

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

时间: 2024-12-24 02:41:15

Java中子类调用父类构造方法的问题分析_java的相关文章

父类构造函数-java中子类重写父类构造方法问题

问题描述 java中子类重写父类构造方法问题 伪代码 class 子类 extends 父类 { super () } super可写可不写 反正不写也会执行是吧 解决方案 是的,如果调用无参的构造函数,可以不写,因为这是默认的. 解决方案二: 默认调用父类的无参构造方法,但是如果父类中没有无参构造方法就必须得写了,因为要传参数才能创建父类 解决方案三: super()默认是有的 解决方案四: 父类构造是不能被重写的 解决方案五: java中子类调用父类的构造方法Java中子类与父类的构造方法的

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

在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?     答案如下:     当你new一个子类对象的时候,必须首先要new一个父类的对像出来,这个父类对象位于子类对象的内部,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出来,那么肯定要调用其构造方法,所以:     第一个规则:子类的构造过程中,必须

java语法-java中return super.父类构造方法 是神马意思

问题描述 java中return super.父类构造方法 是神马意思 java中return super.父类构造方法 是神马意思 可以 java中return super.子类构造方法 是神马意思 java中return super.方法 是神马意思 解决方案 没意思,就是调用父类的此函数,这就是继承,return 就是返回父类的该方法的结果,如果只有一句return,可以不写 解决方案二: 如果只有一句return,可以不写子类的实现

java中子类继承父类,程序运行顺序的深入分析_java

我们经常在项目中使用继承,但是往往不太明白,程序运行的顺序以及原理,尤其是使用上转型对象的时候,以及父类子类中都有static变量和方法时,不知道先运行谁.我也是写了一个例子.总结了一下. 复制代码 代码如下: 父类:public class TestStatic {     public static String name="china";     {       System.out.println("========方法体========");    }  

java中子类与父类中隐含的this引用的分析

/* 看一下下面的程序,看是否你的答案和运行的答案是否一致! */ class Parent{ public int x; public Parent p; public Parent(){} public Parent(int x){ this.x=x; p=this; } public void f(){ System.out.println("Parent::f()"); } public void g(){ System.out.println("Parent::g(

Java中汉字转拼音pinyin4j用法实例分析_java

本文实例讲述了Java中汉字转拼音pinyin4j用法.分享给大家供大家参考,具体如下: 汉字转换拼音在日常开发中是个很常见的问题.例如我们伟大的12306,在地名中输入"WH",就会出现"武汉""芜湖""威海"等地名,输入"WUHU"就会出现"芜湖". Java获取汉字的拼音,pinyin4j这个库可以很好的解决这个问题. 下载地址:http://sourceforge.net/pro

在java中使用dom解析xml的示例分析_java

dom是个功能强大的解析工具,适用于小文档 为什么这么说呢?因为它会把整篇xml文档装载进内存中,形成一颗文档对象树 总之听起来怪吓人的,不过使用它来读取点小东西相对Sax而言还是挺方便的 至于它的增删操作等,我是不打算写了,在我看教程的时候我就差点被那代码给丑到吐了 也正因为如此,才有后来那些jdom和dom4j等工具的存在-- 不多说,直接上代码 Dom解析示例 复制代码 代码如下: import java.io.File; import javax.xml.parsers.Document

python中关于super调用父类构造方法

问题描述 python中关于super调用父类构造方法 class Person: def init(self,n,s): self.name=n self.sex=s print "Person" class Student(Person): def init(self,n,s,j): self.job=j print "test" super(Person,self).__init__(n,s) print "Student" s=Stude

对象-Java中子类重载的问题

问题描述 Java中子类重载的问题 比如我现在又两个具有继承关系的类: 父类:Animal 子类:Dog 在父类中有一个方法eat() 在子类中,除了继承了父类的eat()方法外,我自己还写了一个eat()的重载方法:eat(String a) 然后创建对象: Animal a = new Dog(); 为什么在创建对象a后,调用eat方法时,不能调用eat(String a)方法,而只能调用eat()方法? 解决方案 我是初学者,我说说自己的理解哈.一个是eat(),一个是eat(String