关于继承类的创建问题

SmarkMeng 2012-02-13 07:38:12
class A{
static{
System.out.print("1");
}
public A(){
System.out.print("2");
}
}
class B extends A{
static{
System.out.print("a");
}
public B(){
System.out.print("b");
}
}
public class Hello{
public static void main(String[] ars){
A ab = new B(); //执行到此处,结果: 1a2b
ab = new B(); //执行到此处,结果: 1a2b2b
}
}
问题:如果始终以ab指向新建的对象(ab = new B();),结果是1a2b2b2b...... 请帮忙解释一下。。。
...全文
173 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
戴墨镜的虫子 2012-02-14
  • 打赏
  • 举报
回复
恩,大家都分析的很到位了,我就是来顶贴的!
zx44y 2012-02-14
  • 打赏
  • 举报
回复
5楼正解。
Acesidonu 2012-02-14
  • 打赏
  • 举报
回复
A ab = new B(); //输出1a2b
ab = new B(); //输出2b
ab = new B(); //输出2b
。。。
静态的只输出一次
Tang_huawei 2012-02-14
  • 打赏
  • 举报
回复
没有什么问题啊,静态块只执行一次,所以只有一次1和a,然后每次都构造一个新的对象,当然后面的就会一继续执行构造方法
北京-星辰 2012-02-13
  • 打赏
  • 举报
回复
static是静态代码块在其在加载到虚拟机时就会运行且只运行一次,其运行顺序在构造方法之前,然后各个构造方法的执行顺序是先执行父类在执行子类。
结贴是美德 2012-02-13
  • 打赏
  • 举报
回复
跟引用变量的类型没一毛钱关系,写成Object ab = new B();都是一样的。
第一次new B()输出1a2b,在new就永远2b,你new两次就是1a2b2b,继续new就是1a2b2b2b2b2b2b。。。。。。
Little_Johnny 2012-02-13
  • 打赏
  • 举报
回复
你认为应该输出的是什么啊
SmarkMeng 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jmf_zaiecp 的回复:]

没看出什么问题啊,static的是属于类的,只构造一次。构造完static再构造函数,每构造出一个B对象打印出来一个2b(楼主的变量名起得很有喜感。。。)
[/Quote]
了解 把打印的累加理解错了
jmf_zaiecp 2012-02-13
  • 打赏
  • 举报
回复
没看出什么问题啊,static的是属于类的,只构造一次。构造完static再构造函数,每构造出一个B对象打印出来一个2b(楼主的变量名起得很有喜感。。。)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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