在网上看到一段关于java构造方法的描述,其中有一些地方不是很明白,希望有人能指点一下具体如下:

我叫赵怡彬 2016-09-26 05:25:20
构造方法的方法体定义中,可以调用此类的父类的构造方法,也可以调用此类的另一个构造方法,这种调用必须由方法体的第一个语句完成。但是,构造方法的调用不允许通过方法名,所以,用 this 代表本类中的一个构造方法,而 super 则代表了其父类的一个构造方法。需要注意的是,在构造函数中,如果 this 语句,则必有 super 语句,要么自己编写 super 语句,要么由系统自动调用 super 语句。

我在学的时候遇到的一个类只有一个构造方法,这让我想到:一个类中可以有多个构造方法吗?如果有,那么既然构造方法的名字是确定的,那如何区分?设置多个构造方法又有什么好处呢?其中“用 this 代表本类中的一个构造方法”这句话有个疑问:那是不是一个子类只能调用一个自己的构造方法,如果想调用两个或两个以上的构造方法就不行了?
...全文
489 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
我叫赵怡彬 2016-09-29
  • 打赏
  • 举报
回复
引用 1 楼 lucifarcyl的回复:
构造方法可以存在有参无参的多种构造方法,下面这些都是String的构造方法,通过不同的参数来分辨
这个表哪里可以看吗?网上的api文档不都是想怎么吗?
我叫赵怡彬 2016-09-29
  • 打赏
  • 举报
回复
引用 6 楼 leileime12的回复:
[quote=引用 5 楼 qq_36230750 的回复:] [quote=引用 4 楼 WeirdPerson的回复:]多个构造方法和方法重载是一样的,至于不同的构造方法有什么好处是,构造方法是在给类型变量赋值前实例花对象的时候运行的方法,每个构造方法可以在赋值变量前运行不断不同的功能。当然也可以是相同的。还有,如果父类写了一个带参数的构造方法,那么它默认无参数的构造方法就没了!子类必须实现父类的构造方法。如果你用this去调用当前类的另一个构造方法时,那么被调用的构造方法必须实现父类的一个构造方法。
今天又学了方法重载,那么问题来了方法重载,只要参数类型不一样,也可以构成重载,那我如果定义两个方法add(int a,int b)和add(char a,char b)实例化的过程中add(1,2)如何区别用的是哪个方法呢?[/quote] 你的两个add方法传入的参数不一样啊,add(1,2)只会调用int方法,想要调用char的方法,应该是add('1','2')这样的。[/quote] 恩,我知道啦,谢谢耐心解答
我叫赵怡彬 2016-09-29
  • 打赏
  • 举报
回复
引用 7 楼 当作看不见的回复:
[quote=引用 5 楼 qq_36230750 的回复:] 今天又学了方法重载,那么问题来了方法重载,只要参数类型不一样,也可以构成重载,那我如果定义两个方法add(int a,int b)和add(char a,char b)实例化的过程中add(1,2)如何区别用的是哪个方法呢?
char 是用'1','a',表示 ,int 1 ,2 String "1" ,"2",float 1.0 2.0 ,每一种类型都不一样的[/quote] 好的,谢谢,我突然忘了char要加''
wulijack 2016-09-28
  • 打赏
  • 举报
回复
引用 5 楼 qq_36230750 的回复:
[quote=引用 4 楼 WeirdPerson的回复:]多个构造方法和方法重载是一样的,至于不同的构造方法有什么好处是,构造方法是在给类型变量赋值前实例花对象的时候运行的方法,每个构造方法可以在赋值变量前运行不断不同的功能。当然也可以是相同的。还有,如果父类写了一个带参数的构造方法,那么它默认无参数的构造方法就没了!子类必须实现父类的构造方法。如果你用this去调用当前类的另一个构造方法时,那么被调用的构造方法必须实现父类的一个构造方法。
今天又学了方法重载,那么问题来了方法重载,只要参数类型不一样,也可以构成重载,那我如果定义两个方法add(int a,int b)和add(char a,char b)实例化的过程中add(1,2)如何区别用的是哪个方法呢?[/quote] 你的两个add方法传入的参数不一样啊,add(1,2)只会调用int方法,想要调用char的方法,应该是add('1','2')这样的。
kakasun_0 2016-09-28
  • 打赏
  • 举报
回复
一个类中可以有多个构造方法,子类如果不指出调用哪个构造方法,默认调用无参的构造方法,无参的构造方法可以不写,是默认存在的,如果你类中写了构造方法(包括无参有参),就会代替掉无参的构造方法。 调用构造方法是为了让你新建的对象去初始化数据,构造方法中用this来调用其他构造方法,而this这个构造方法又会调用父类的构造方法,所有this要在构造方法第一行出现。
当作看不见 2016-09-28
  • 打赏
  • 举报
回复
引用 5 楼 qq_36230750 的回复:
今天又学了方法重载,那么问题来了方法重载,只要参数类型不一样,也可以构成重载,那我如果定义两个方法add(int a,int b)和add(char a,char b)实例化的过程中add(1,2)如何区别用的是哪个方法呢?
char 是用'1','a',表示 ,int 1 ,2 String "1" ,"2",float 1.0 2.0 ,每一种类型都不一样的
WeirdPerson 2016-09-27
  • 打赏
  • 举报
回复
多个构造方法和方法重载是一样的,至于不同的构造方法有什么好处是,构造方法是在给类型变量赋值前实例花对象的时候运行的方法,每个构造方法可以在赋值变量前运行不断不同的功能。当然也可以是相同的。还有,如果父类写了一个带参数的构造方法,那么它默认无参数的构造方法就没了!子类必须实现父类的构造方法。如果你用this去调用当前类的另一个构造方法时,那么被调用的构造方法必须实现父类的一个构造方法。
我叫赵怡彬 2016-09-27
  • 打赏
  • 举报
回复
引用 4 楼 WeirdPerson的回复:
多个构造方法和方法重载是一样的,至于不同的构造方法有什么好处是,构造方法是在给类型变量赋值前实例花对象的时候运行的方法,每个构造方法可以在赋值变量前运行不断不同的功能。当然也可以是相同的。还有,如果父类写了一个带参数的构造方法,那么它默认无参数的构造方法就没了!子类必须实现父类的构造方法。如果你用this去调用当前类的另一个构造方法时,那么被调用的构造方法必须实现父类的一个构造方法。
今天又学了方法重载,那么问题来了方法重载,只要参数类型不一样,也可以构成重载,那我如果定义两个方法add(int a,int b)和add(char a,char b)实例化的过程中add(1,2)如何区别用的是哪个方法呢?
当作看不见 2016-09-26
  • 打赏
  • 举报
回复
多个构造方法,但是只会调用一个,如何确认调用哪个构造方法,请参考重载的知识,
小灯光环 版主 2016-09-26
  • 打赏
  • 举报
回复
构造方法可以有多个,而且一般都是重载的形式~ 比如: public Student(){} public Student(String name){} public Student(String name,ing age){} 分别是无参构造方法,一个参数的构造方法和两个参数的构造方法
lucifarcyl 2016-09-26
  • 打赏
  • 举报
回复
构造方法可以存在有参无参的多种构造方法,下面这些都是String的构造方法,通过不同的参数来分辨

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧