永发信息网

帮忙看看下面的程序,是关于Java中的构造函数的问题

答案:5  悬赏:50  手机版
解决时间 2021-04-21 13:12

public class A {
int a=1;
public A (){
System.out.println(a);
}
}

public class B extends A{
int a=4;
public B(){
System.out.println(a);
}

}

public class Text {


public static void main(String[] args) {
A a=new A();
B b=new B();
System.out.println("A中a的值"+a.a);
System.out.println("B中a的值"+b.a);
}

}

结果

1
1
4
A中a的值1
B中a的值4

为什么结果是这个样子,构造函数不是在实例化的时候才被执行吗???

最佳答案


我想你现在是不是正在学习java的OOP。


面向对象的继承关系。


类A是父类,类B是子类,


1.当我们用A a=new A();时
首先程序会先调用类A的无参的构造函数。就会输出"1".


2.当我们用B b=new B();时


首先程序会先调用类B的父类(即类A)的无参的构造函数,就会输出"1",


再调用自身类( 即类B)的无参的构造函数。就会输出"4";


3.当我们用System.out.println("A中a的值"+a.a);时
程序会根据你所创建的对象(A)中去寻中a字段.然后将值输出在控制台.就会输出"A中a的值1"


4。当我们用System.out.println("B中a的值"+b.a);
程序会根据你所创建的对象(B)中去寻找a字段,然后将值输出在控制台.就会输出"B中a的值4"



给你点提示,在javaoop当中,调用子类时,程序首先会去调用该类的父类的构造函数,然后再调用自身的构 造函数。我想你主要是这点没明白。


还有就是要注意的是调用一个类时。该类有无参的构造函数。程序会首先调用该类的无参的构造函数.


如果没有给无参的构造函数.系统会默认添加。但是前提条件是你并没有给该类提供有参的构造函数。


以上说法只对new 类();有效.



加油吧。javaOOP是很重要的也是有点难度的。希望你能够多练习、多思考。这样就能很快的掌握这门知识


全部回答

程序执行步骤:

new A(); ->初始化类A里的全局变量 ->执行类A的构造函数(输出 1 ) ->new B(); -> 初始化类B的全局变量 ->由于类B继承了类A,JVM隐含执行类A的初始化,执行其构造(又输出一个 1) ->执行类B的构造函数(输出 4 )-> 继续输出 (A中a的值1)和( B中a的值4)

对象实例化的时候会调用构造函数,首先调用基类的构造函数,然后是派生类
对的啊 哪儿不对?

public B(){ System.out.println(a); }

有一部分缺省了,这个缺省段在子类构造函数第一行没有调用父类任何构造函数时默认添加:

public B(){ super();

System.out.println(a); }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎样做到不去想一个人呢?
四季代表人的心情是什么
解梦,急急急急
义务植树宣传标语,关于植树造林的宣传标语
我今天收到了一笔账款,利息为7.6,本金3000
新巴尔虎右旗事业单位登记管理局地址有知道的
显示器的接口有哪几种,电脑主机显示器接口有
载具卡片用了会绑定么?
變得陌生的愛情該愛下去還是該放手??
裕安街这个地址在什么地方,我要处理点事
汉字是什么文字,犭字旁加赖字是什么字
急求好听名字
南昌宝葫芦村庄门票 有学生证的打几折啊!|?
三星 I8000 和 I8910 这 两 款 手 机 买 哪
白照我想知道这个在什么地方
推荐资讯
寻找和阿里巴巴这样的商业平台
金星辉写字楼怎么去啊,有知道地址的么
装修效果图如何制作,怎么画装修效果图
灵口镇永康诊所在什么地方啊,我要过去处理事
中国联通(裴家堡营业厅)这个地址在什么地方,
大家对上海钓鱼 怎么看
怎么可以学好高中数学?
没键盘怎么开机输密码,键盘输不了密码怎么回
劲舞团会员等级2能不能领取标志?
如何给手机充电,手机如何在车上充电
筠州足道馆地址有知道的么?有点事想过去
若基亚N86
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?