首页 > 其他分享 >无参构造和有参构造

无参构造和有参构造

时间:2024-04-11 17:56:24浏览次数:18  
标签:无参 定义 构造方法 构造 默认 new AnotherClass

在Java中,如果一个类没有显式地定义任何构造方法,那么编译器会自动为它生成一个默认的无参数构造方法(也称为默认构造方法或零参数构造方法)。这个默认的构造方法会简单地调用父类的无参数构造方法(如果存在并且可访问的话)。

但是,一旦你在类中定义了至少一个构造方法(无论是有参数的还是无参数的),编译器就不会再为你自动生成默认的无参数构造方法。这意味着,如果你定义了一个有参构造方法,并且没有定义无参构造方法,那么你的类将不再拥有一个默认的无参数构造方法。

这里有一个简单的例子来说明这一点:

class MyClass {
    // 没有定义任何构造方法
    // 此时,编译器会为我们生成一个默认的无参数构造方法
}

class AnotherClass {
    // 定义了一个有参构造方法
    AnotherClass(String message) {
        System.out.println("AnotherClass constructor with message: " + message);
    }
    
    // 没有定义无参构造方法
    // 此时,编译器不会为我们生成一个默认的无参数构造方法
}

public class Main {
    public static void main(String[] args) {
        // MyClass有默认的无参构造方法,所以可以这样创建对象
        MyClass myObject = new MyClass();
        
        // AnotherClass没有无参构造方法,因此不能这样创建对象
        // AnotherClass anotherObject = new AnotherClass(); // 这将导致编译错误
        
        // 必须使用有参构造方法来创建AnotherClass的对象
        AnotherClass anotherObject = new AnotherClass("Hello from AnotherClass");
    }
}

在上面的例子中,MyClass没有定义任何构造方法,所以编译器会为它生成一个默认的无参数构造方法。因此,我们可以使用new MyClass()来创建MyClass的对象。

然而,AnotherClass定义了一个有参构造方法,并且没有定义无参构造方法。因此,编译器不会为它生成一个默认的无参数构造方法。如果我们尝试使用new AnotherClass()来创建AnotherClass的对象,将会导致编译错误,因为没有合适的构造方法可以被调用。我们必须使用有参构造方法new AnotherClass("Hello from AnotherClass")来创建AnotherClass的对象。

如果你需要在AnotherClass中同时使用有参构造方法和无参构造方法,你需要显式地定义它们:

class AnotherClass {
    // 定义了一个无参构造方法
    AnotherClass() {
        System.out.println("AnotherClass no-arg constructor called");
    }
    
    // 定义了一个有参构造方法
    AnotherClass(String message) {
        System.out.println("AnotherClass constructor with message: " + message);
    }
}

public class Main {
    public static void main(String[] args) {
        // 现在可以这样创建AnotherClass的无参对象
        AnotherClass anotherObject1 = new AnotherClass();
        
        // 也可以这样创建有参对象
        AnotherClass anotherObject2 = new AnotherClass("Hello from AnotherClass");
    }
}

现在,AnotherClass既有无参构造方法也有有参构造方法,可以根据需要创建不同类型的对象。

标签:无参,定义,构造方法,构造,默认,new,AnotherClass
From: https://www.cnblogs.com/DuWenjie/p/18129769

相关文章

  • stm32采集烟雾和温湿度+ESP8266转发解析+python构造http
      https://www.cnblogs.com/gooutlook/p/16061136.html  http://192.168.1.103/Control_SensorPin?sensor=sensor_all&action=GetDatapython#-*-coding:utf-8-*-importrequestsimporturllib.parse#pipinstallrequestsdefSendHttp():#ht......
  • 第二节:C#12新语法(主构造函数、集合表达式、默认Lambda参数)
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 《C++程序设计》阅读笔记【7-堆和拷贝构造函数】
    ......
  • 小美的数组构造(美团2024届秋招笔试第二场编程真题)
    题面核心思想dp[i][j]表示前i个数字和为j时的组合数那么第i个数的取法有1<=k<=j需要遍历第i个数取k前i-1个数取j-k时dp[i][j]=(dp[i][j]+dp[i-1][j-k])%MOD;注意是和为j第i个数取k所以是dp[i][j]。同时需要判断第i个数不能和a数组取相同的......
  • 记一次php反序列化漏洞中的POPchain和POC构造实战
    来自于橙子科技反序列化靶场源代码如下:<?php//flagisinflag.phphighlight_file(__FILE__);error_reporting(0);classModifier{private$var;publicfunctionappend($value){include($value);echo$flag;}publicfunction......
  • 软件构造中的各类注释介绍与实例演示
    本文系笔者在学习软件构造课程期间所写,不保证通用性和正确性,仅供参考。目录前言SpecAbstractFunctionRepInvariantSafetyfromExposureTestingStrategy结语一、前言之前的代码中都不怎么重视注释,有注释也就是随便一两行解释一下下面的代码是干什么的。学习课......
  • CF1917E-构造
    link:https://codeforces.com/contest/1917/problem/E给定\(n,k\),保证\(n\)是偶数,需要构造一个\(n\timesn\)的01矩阵,满足一共有\(k\)个1,且每行每列1的个数的奇偶性相同。给出构造或断定不存在方案。\(n\)是偶数意味着\(k\)必然是偶数(不管每行是奇还是偶数个1,最终总和......
  • CF911F-构造、树直径
    link:https://codeforces.com/contest/911/problem/F给一棵树,你需要进行若干次操作:选择两个叶子,把他们的距离加入得分,删掉其中一个叶子。希望让最终得分最大。构造方案。删叶子,距离最大,考虑树的直径很明显用树的直径不会让答案更劣(一棵树可能有多个直径,但直径的中心是唯一的,在......
  • 3.类与对象(中篇)介绍了类的6个默认构造函数,列举了相关案例,实现了一个日期类
    1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。默认成员函数是一种特殊成员函数:​......
  • CF1943C-构造、树直径
    link:https://codeforces.com/contest/1943/problem/C题意:给一棵树,初始所有点为白色,每次操作可以选一个点\(v\),和一个距离\(d\),表示将所有距离点\(v\)恰好\(d\)的点染成黑色,问最少需要几次操作让树全黑,给出操作序列。树、二分图、黑白染色一条链怎么做?\(s_1,\dots,s_n\)......