首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么即使类和构造函数的情况不同,我的构造函数仍然被调用?

这个问题涉及到Java编程语言中的类和构造函数的概念。在Java中,构造函数是一种特殊的方法,用于初始化对象的状态。当创建一个对象时,构造函数会被自动调用。

在这个问题中,我们需要了解两个类的情况不同,但是构造函数仍然被调用的原因。这可能是由于以下几个原因:

  1. 如果两个类的构造函数具有相同的参数类型和数量,那么在创建对象时,编译器可能会混淆它们。在这种情况下,可以通过更改构造函数的参数列表来解决问题。
  2. 如果两个类的构造函数具有相同的访问修饰符(例如public、private等),那么在创建对象时,编译器可能会调用错误的构造函数。在这种情况下,可以通过更改构造函数的访问修饰符来解决问题。
  3. 如果两个类的构造函数都没有参数,那么在创建对象时,编译器可能会调用错误的构造函数。在这种情况下,可以通过添加一个带参数的构造函数来解决问题。

总之,当两个类的构造函数情况不同时,构造函数仍然被调用的问题可能是由于编译器混淆、访问修饰符不同或构造函数参数不同等原因导致的。为了解决这个问题,可以尝试更改构造函数的参数列表、访问修饰符或添加带参数的构造函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

构造函数析构函数

一、构造函数析构函数由来 数据成员不能在声明时候初始化,为了解决这个问题? 使用构造函数处理对对象初始化。...构造函数是一种特殊成员函数,与其他函数不同,不需要用户调用它,而是创建对象时候自动调用。析构函数是对象不再使用时候,需要清理资源时候调用。...二、构造函数 (1)初识初始化 C++支持两种初始化形式:复制初始化直接初始化,对于直接初始化直接调用实参匹配构造函数,复制初始化总是调用复制构造函数。...“当用于类型对象时,初始化复制形式直接形式有所不同:直接初始化直接调用与实参匹配构造函数,复制初始化总是调用复制构造函数。...在mian函数执行完毕之后,ctct1分别调用析构函数,所以delete两次同一块内存空间,所以程序会崩溃。下面的输出结果也验证了我们猜想是正确。建议在这种情况下采用深拷贝进行操作。

1.8K20

python 子类调用构造函数实例

当子类继承父后,需要调用方法属性时,需要调用初始化函数。...super函数返回一个super对象,解析过程自动查找所有的父,当前对象可以作为super函数参数使用,调用函数返回方法是超方法。...使用super函数如果子类继承多个父只许一次继承,使用一次super函数即可。 如果没有重写子类构造函数,是可以直接使用父属性方法。...补充知识:python3 python2 调用构造方法写法区别 1. python3 python2 调用构造方法写法区别 前一段时间,把之前一个项目迁移到python3 发现了很多不同地方....这里简单说明了,构造方法不同 之后可能会继续更新不同.

3.5K30
  • java构造代码块,构造函数普通函数区别调用时间

    在这里我们谈论一下构造代码块,构造函数普通函数区别调用时间。 构造代码块:最早运行,比构造函数运行时间好要提前,构造函数一样,只在对象初始化时候运行。...构造函数:运行时间比构造代码块时间晚,也是在对象初始化时候运行。没有返回值,构造函数名称名一致。...普通函数:不能自动调用,需要对象来调用,例如a.add(); 如果只看代码运行先后顺序的话:构造代码块>构造函数>普通函数 下面给一个程序 1 public class Test1 { 2 3...("是普通函数"); 25 } 26 //构造代码块2: 27 { 28 System.out.println("构造代码块2"); 29...构造函数通过重载,有两种初始化方式,一种是没有参数,一种是有参数。 如果不调用普通函数,普通函数是不能执行

    1.5K20

    使用Python构造函数析构函数

    1、问题背景当使用Python时,可以使用构造函数析构函数来初始化清理实例。构造函数在创建实例时自动调用,而析构函数在删除实例时自动调用。...在上面的代码示例中,Person具有一个构造函数__init__一个析构函数__del__。...构造函数__init__在Person实例创建时调用,它将实例name属性设置为传入参数,并将实例的人口计数population加1。...析构函数__del__在Person实例被删除时调用,它将实例的人口计数population减1。...问题是,如果在程序中显式地删除Person实例,析构函数__del__是否会被自动调用,或者是否需要在“main”程序/中添加一些东西,如上面的代码示例所示?

    18710

    Java中子类构造函数

    参考链接: Java中继承构造函数 这篇文章总结了关于Java构造常见​​问题。  1)为什么创建一个子类对象要也需要调用构造函数? ...,构造对象时,父构造函数(super())首先调用。...如果没有,编译器会插入调用构造语句。这就是为什么在创建子类对象时父构造函数会被调用。  这里没有创建两个对象,只有一个子对象。...这是上边Super发生情况。  子类构造函数,无论有参构造还是无参构造,将会调用默认无参构造函数。...4)规则 简而言之,规则是:子类构造函数必须调用构造函数,无论隐式调用还是显式调用,无论哪种方式,调用构造函数必须得先定义。

    2.2K20

    【C++】构造函数初始化列表 ② ( 构造函数 为 初始化列表 传递参数 | 嵌套情况 构造函数 析构函数 执行顺序 )

    , 执行了 A 构造函数 ; B 中还定义了 有参构造函数 , 接收 3 个参数 , 分别作为 m_age 成员值 , A 类型成员对象 有参构造函数 2 个参数 , 这是 使用了...B b(10, 10, 150); // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; } 执行结果 : 二、嵌套情况 构造函数.../ 析构函数 执行顺序 ---- 1、构造函数 / 析构函数 执行顺序 B 中 定义了 A 类型 成员变量 ; A 类型对象 是 组合对象 ; 构造函数执行顺序 : 在 初始化 B 类型 实例对象时..., 先执行 组合对象 A 构造函数 , 如果 组合对象 有多个 , 则 按照 成员变量 定义顺序 进行初始化 ; 注意 : 此处 不是按照 初始化列表 顺序 进行初始化 ; 析构函数执行顺序...: 析构函数构造函数 执行顺序 相反 ; 2、代码示例 - 构造函数执行顺序 下面的代码中 , 在 B 中定义 A 类型 成员变量 ; 执行构造函数时 , 先调用 A 构造函数 , 再调用

    24430

    【C++】对象(中):默认成员函数构造函数、析构函数、拷贝构造函数、运算符重载

    一个,我们在不写情况下编译器会默认生成6个默认成员函数(C++11后还增加了两个默认成员函数,新增后面再说),重点学习前四个,后两个稍微了解即可。...3.我们不写,编译器默认生成构造,对内置类型成员变量自定义成员变量不同。...这里解释一下为什么拷贝构造第一个参数传参方式必须是引用。 首先我们要知道,C++规定传值传参要调用拷贝构造,没有为什么,就是规定。比如说下面这个f1函数。...而自动生成拷贝构造函数对自定义类型内置类型不同前面说构造函数有一点区别就是,拷贝构造对内置类型也会拷贝,前面说过构造函数对内置类型是否初始化是不确定,这里注意一下。...这也就是为什么在这一小节开头并没有自己写拷贝构造函数代码但依然可以进行拷贝构造

    8810

    【C++】继承 ⑧ ( 继承 + 组合 模式对象 构造函数 析构函数 调用规则 )

    一、继承 + 组合 模式对象 构造函数析构函数调用规则 1、场景说明 如果一个 既 继承了 基 , 又 在中 维护了一个 其它类型 成员变量 , 那么 该类 构造 与 析构 , 就需要涉及到... 本身 构造函数 析构函数 , 父 构造函数 析构函数 , 成员变量 构造函数 析构函数 ; 2、调用规则 在 继承 + 组合 情况下 , 构造函数 与 析构函数 调用规则如下...: 构造函数 : 父 -> 成员 -> 自身 ; 首先 , 调用 构造函数 ; 然后 , 调用 成员 构造函数 ; 也就是 成员变量 类型 构造函数 ; 最后 , 调用 自己 构造函数 ;...; A B 构造函数 , 是 父构造函数 ; D 构造函数 , 是 成员构造函数 ; C 构造函数 , 是 自身构造函数 ; 构造函数调用顺序为 : 父 -> 成员 -> 自身 , 符合上述调用原则...; 然后分析 析构函数 调用顺序 ; C 析构函数 , 是 自身构造函数 ; D 析构函数 , 是 成员构造函数 ; A B 析构函数 , 是 父构造函数 ; 析构函数调用顺序为 : 自身

    18410

    C++-编写String构造函数、析构函数赋值函数

    浏览量 2 说到这题就想到了很早之前一次面试,就是由于这题被面试官说一文不值(当然说得也不错),这题是c++里面的基本题目,据说能够完整写出来的人,基础就达到了及格以上水平,在后续面试里面就没有看到这样题目...已知String原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String...&other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operator =(const String &other); // 赋值函数 private...: char *m_data; // 用于保存字符串 }; 关于这道题目的解答,在网上看到一个较完整就直接发给大家看一下,如果你有些慨念不清楚,比如什么是赋值函数,它怎么样实现,以及功能是什么...,可以自己在网上搜索一下,这里就不把这些知识搬过来了,想会学习小伙伴一定会主动弄清楚这些问题,而不是等着别人来告诉你。

    61010

    关于Java构造函数(Constructor)常见问题总结1 为什么调用子类构造方法时候,默认会调用构造方法2 常见错误:Implicit super constructor is und

    1 为什么调用子类构造方法时候,默认会调用构造方法 看下面这个简单例子: package cc; public class Sub extends Super { public Sub...这就是为什么我们上面的那个例子程序会先调用super构造方法。 但要切记,** 虽然调用了父构造方法,但只创建了一个对象也就是子对象。...解决这个问题很简单,我们可以给父插入一个无参构造函数,或者在子类构造函数中显示调用有参构造函数。 在子类构造函数中显示调用构造函数 下面的代码是正确。 ?...Paste_Image.png 构造函数使用规则 简单说,在使用时候,子类构造函数必须调用构造函数,不管有没有显示声明。所以,调用构造函数,一定在定义好!...为什么Java在一个已经实现了一个带参构造函数时候,不实现默认无参构造函数? 这是个很有趣问题。

    2.9K41

    C++复制构造函数赋值运算符

    前言: C++面向对象编程过程中,凡是在中运用到动态内存分配时候总是会写一个显示复制构造函数赋值重载运算符,本文将结合C++ Primer Plus一书内容分析下原因: 一、在C++编程中如果没有编写下列成员函数...除了直接看出来一些表达式能满足以上两个条件,函数按值传递(函数按值传递是变量副本)函数返回对象情况也同时满足了以上两个条件。...而且有些情况编译器会生成临时变量,然后将临时变量在赋值给传递对象。 3、默认复制构造函数做了哪些事情?     默认赋值构造函数逐个复制非静态成员值。注意是值,是一种浅复制。...4、下面举个例子看看动态内存分配情况不定义显示赋值构造函数会出现什么问题 1 // 复制构造函数探索.cpp : 定义控制台应用程序入口点。...Str s2;s2=s1;这两句用到了赋值运算符,而浅复制导致s1s2指针指向了同一个位置,当s1析构时候s2指向内存单元也释放掉,所以再delete s2中str时候系统就崩溃啦。

    1.2K70

    Python构造函数__init__(self)析构函数__del__详解

    一、构造方法__init__(self) __init__()方法是一种特殊方法,被称为构造函数或初始化方法,当创建了这个实例时就会调用该方法。...testman = testClass('neo,'male') //这里创建了testClass一个实例 testman, 中有__init__这个方法,在创建实例时候,就必须要有方法_...__del__ __del__ (),被称为析构函数,__del__()在对象消逝时候调用,当对象不再被使用时,__del__()方法运行。...__del__等所有程序执行完才会执行 #2、del方法,无法再被调用 #3、析构函数会自动调用 #4、del 方法,会调用析构函数 "C:\Program Files\Python35\python.exe...小张 22 小张 上海市 准备清理 这里是构造方法 王大大 33 王大大 上海市 这里是析构函数,清理了 这里是析构函数,清理了

    3.7K20

    创建子类对象时,父构造函数调用被子类重写方法为什么调用是子类方法?

    A对象时候父调用子类方法?...但是:创建B对象父调用方法? 答案: 当子类加载到内存方法区后,会继续加载父到内存中。...如果,子类重写了父方法,子类方法引用会指向子类方法,否则子类方法引用会指向父方法引用。 如果子类重载了父方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父方法,则方法引用会指向父方法。 当子类对象创建时,会先行调用构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译时候,父构造方法调用方法参数已经强制转换为符合父方法参数了。 上边代码在编译前已经转换为下面这个样子了。

    6.2K10

    【C++修行之道】对象(二)6个默认成员函数构造函数、析构函数

    2.4 一般情况,建议每个,都可以写一个全缺省构造(好用) 三、析构函数 3.1 概念 3.2 特性 3.3 C++实现括号匹配C语言不同 一、6个默认成员函数 如果一个中什么成员都没有,...确保成员变量正确初始化:自动生成构造函数调用成员变量默认构造函数,确保 MyQueue 中两个 Stack 对象在 MyQueue 对象创建时正确初始化。...这样,开发者可以专注于其他功能逻辑,而不必担心基本初始化问题。 2.2.7 无参构造函数全缺省构造函数都称为默认构造函数,并且默认构造函数只能有一个。...,为什么最后会调用Time析构函数?...3.3 C++实现括号匹配C语言不同 可以明显看出,C++对应C语言来说简化了不少,对C语言进行了一定优化。 今天就先到这了!!!

    15410

    实例化顺序:静态数据、构造函数字段执行顺序详解

    这些静态数据在整个层次结构中只会初始化一次。 父构造函数:接着,父构造函数会被调用。父构造函数可能会执行一些初始化操作,例如设置实例字段默认值。...子类静态数据初始化:在父静态数据初始化完成后,子类静态数据也会被初始化。同样,这些静态数据在整个层次结构中只会初始化一次。 子类构造函数:最后,子类构造函数调用。...子类构造函数通常会首先调用构造函数,然后执行子类自己初始化操作。 字段初始化:在构造函数执行期间,实例字段(非静态字段)会被初始化。...父构造函数构造函数打印"Constructor of Parent"。 instance_field初始化为"Instance field in Parent"。...谢谢您阅读! 正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池键盘手表

    73820

    c++学习笔记4,调用派生顺序构造析构函数(一个)

    大家好,又见面了,是全栈君 测试源代码: //測试派生构造函数调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include using namespace..."<<endl; A *a2=new A; //仅仅有在new 一个对象时候才会调用构造函数 cout<<"能够看到...a3也并没有调用构造函数"<<endl; A *a3=&a; B b; } 输出为: 能够看到,在创建派生对象时候,首先调用是基构造函数,然后才是调用派生自己构造函数...而在析构时候,顺序则刚好相反,先调用派生析构函数,然后才是调用构造函数。这是由于对象创建时候对象存放在堆栈中原因。(new 对象尽管是存在堆中,可是在堆栈中依旧存放其堆中地址,因此。...析构时候也是一样) 那么,创建其对象数组时:A a[2],是否会调用构造函数呢。这是肯定

    70610

    原型模式C++复制构造函数赋值运算符

    一、简介 1、原型模式,用原型实例指定创建对象种类,并且通过拷贝这些原型创建新对象。 2、为什么会用到原型模式? (1)既然可以直接new,为什么会用到原型模式?...这个可以从两个角度来说,第一,时间消耗角度:如果创建实例构造函数非常复杂,在执行这个构造函数时会消耗较长时间,这时如果需要一个跟刚刚实例化对象参数差不多实例(可以完全相同,也可以大部分相同)那么直接使用...第二,用户修改麻烦程度角度,举个例子,假设要通过一个实例化一各班同学毕业信息,那么会有大量雷同信息,这时如果要用new实例化,就需new很多次,更悲剧是如果所有同学信息都录入完毕,突然发现某个参数信息录入错了...(2)既然可以直接赋值,为什么会用到原型模式?...因为之间直接赋值的话,默认拷贝函数是进行引用赋值 对于指针浅复制会造糟糕结果,这点可以参见C++ primer plus "动态内存分配"章节,也可以参见我另一篇技术博客 C++复制构造函数赋值运算符

    1.4K50

    【C++】匿名对象 ③ ( 函数返回值为对象值时 匿名对象 拷贝构造函数 与 析构函数 调用情况分析 )

    , 以及不同使用场景下 , 匿名对象 创建与销毁情况 ; C++ 编译器 发现 使用 匿名对象 时 , 会根据 匿名对象 用法 , 决定对 匿名对象 处理 ; 匿名对象单独使用 : 如果只是单纯使用..." 赋值构造函数 " , 该类型构造函数有 4 种调用时机 ; ① 使用一个对象初始化另外一个对象 : 使用 一个 实例对象 初始化 另外一个 实例对象 ; // 使用一个对象初始化另外一个对象...// 自动调用拷贝构造函数 Student s2 = s1; ③ 对象值作为函数参数 : 实例对象 以值方式 传递给函数 , 不是以 指针 或 引用 方式 ; // 定义函数, 接收 Student...s(12, 190); return s; } 上述函数中执行操作分析 : 首先 , 调用 Student 2 参数构造函数 , 创建 Student 普通对象 , 初始化变量 s ; 然后...= 190 在 main 函数中 , 执行 匿名对象 赋值 普通变量对象 成员函数 ; 代码示例 : #include "iostream" using namespace std; class

    30220

    【Java】反射简介,利用反射打印一个当中构造函数,方法属性。

    如果你不了解反射的话,来给大家简单介绍一下反射使用方法。 一、反射简介 1、Java反射机制核心是在程序运行时动态加载并获取详细信息,从而操作或对象属性方法。...2.获取一个构造函数 通过class对象我们可以获取这个构造函数。传入参数是一些class对象,通过这些class对象能确定你要获取是哪个构造函数,例如下边代码。...方法属性修饰符 我们都知道、方法属性都是有修饰符,如public、final、private、static等,我们可以通过调用以下方法来获取。...modifier值是一个累加结果,大家可以自己试一试。在上边代码中我们能够看到,构造方法普通方法都可以调用 getModifiers()方法,当然属性也可以。...以上就要反射简单介绍,在这片文章中并没有介绍通过class获取constructor、methodfield该如何使用,以后有机会的话我会发一篇文章介绍,这篇文章主要目的是解决一开始问题。

    14710
    领券