Java子类实例化总是默认调用父类的无参构造方法
2020-09-06 21:15:12
3点赞
继承关系的细节
子类拥有父类的属性和方法,但是对于父类的私有属性(private修饰),子类是无权访问的,只是拥有。
父类可以什么都不写,但是此时程序会自动生成一个无参构造函数。而如果我们自己写了一个有参构造函数,那么程序就不会再帮我们自动生成无参构造函数了,需要自己写,否则程序会报错。至于为什么会报错接着往下看;
当我们使用子类实例化的时候,如果我们没有显式的使用super去调用父类中的构造函数,那么程序会自动的帮我们去调用父类中的无参构造函数进行初始化工作(此时如果出现上面那种情况,自己手写了有参构造但是没有写无参构造,那么程序不就出错了嘛!),再调用子类的有参/无参构造器。
为什么是调用父类的无参构造器而不是有参呢?回答是:不管子类的构造器有没有参数,因为子类继承的是父类的属性和方法,只调用父类的无参构造器就可以继承父类的属性和方法,因此不会调用父类的有参构造器。
代码验证
package classTest;class Father {public Father(){System.out.println('父类的无参构造方法');}public Father(int a ) {System.err.println('父类的有参构造方法'+a);}} class Son extends Father{ public Son() {System.out.println('子类中的无参构造方法');} public Son(int a ) { System.out.println('子类中的有参构造方法'+a); } }public class TestExecute {public static void main(String[] args) {Son s = new Son();System.out.println('==============');Son a = new Son(111); }}结果: 父类的无参构造方法 子类中的无参构造方法==============父类的无参构造方法 子类中的有参构造方法111
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
点击阅读全文
打开CSDN,阅读体验更佳
Java子类调用父类的有参和无参的构造方法
1、Java子类自动调用父类的无参构造方法 例1:class Test1{ public Test1(){ System.out.print('1'); } } class Test2 extends Test1{ public Test2(){ System.out.print(' 2'); } } public class Tes 浏览器打开
子类会自动调用父类的无参构造函数
今天去一个公司笔试,遇到了如下的一道题:class TestA{ public TestA(){ System.out.println('A'); }}class TestB extends TestA{ public TestB(){ System.out.println('B'); }}public class Test{ public static void main(String 浏览器打开
评论(1)
写评论
-
vid。
码龄3年
应该是不会帮我们生成无参构造器了1 月前
相关推荐
更多相似内容
java中子类继承父类自动调用父类无参构造方法的问题
父类默认会有个无参的构造方法(只是在父类中没有这个代码,可能是java虚拟机规定的,有知道的麻烦告诉下楼主),当子类extends父类的时候会默认调用。 当父类代码中有无参构造方法的时候,子类中的无参构造方法会默认调用,且不需要super();其他的话,当父类有有参构造方法的时候,按照继承关系,子类也需要有相对的构造方法。 如果有错误请指出。 浏览器打开
Java继承,子类实例化时,调用父类的无参构造方法
子类继承父类时,会继承父类的非私有成员变量和方法。子类实例化时,必须执行父类一系列的初始化工作,如果有多个间接父类,从最初的那个父类执行,这样,子类才能够拥有父类的成员变量和方法。子类实例化时总是先调用父类的无参构造方法示例一父类:Father 子类:SonFather.java//package com;public class Father { private String name 浏览器打开
子类构造函数会默认调用父类无参构造函数
1.调用父类无参构造函数是默认的!子类的构造方法默认都去访问了父类的无参构造方法:在子类中的构造方法后都有一行默认语句 base() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 classFu { publicFu() { Console.WriteLine('fu')... 浏览器打开
子类构造函数是否会默认调用父类的无参构造函数
1 package test; 2 3 public class TestB { 4 5 public TestB() { 6 System.out.println('TestB的无参构造函数...'); 7 } 8 9 } 1 package test; 2 3 public class TestA exte... 浏览器打开
java继承时,实例化子类,是否会默认调用父类构造方法_we...
java中关于子类实例化时调用父类无参构造方法的问题
java中子类在实例化的时候调用父类的无参构造方法容易混淆的大致分以下几种情况: 1、子类和父类同时具有有参和无参的构造方法,子类有参构造方法中第一行写的有super.(xx),且子类实例化时用的是有参构造方法,那么此时不会先调用父类的无参构造方法,而是直接调用子类的有参构造方法; 2、子类和父类同时具有有参和无参的构造方法,子类有参构造方法中第一行写的没有super.(xx),且子类 浏览器打开
赞 (0)