class Super{
int i=10;
Super(){
print();
i=20;
}
void print(){
System.out.print(i);
}
}
public class Sub extends Super{
int j=30;
Sub(){
print();
j=40;
}
void print(){
System.out.print(j);
}
public static void main(String[] args){
System.out.print(new Sub().j);
}
}
int i=10;
Super(){
print();
i=20;
}
void print(){
System.out.print(i);
}
}
public class Sub extends Super{
int j=30;
Sub(){
print();
j=40;
}
void print(){
System.out.print(j);
}
public static void main(String[] args){
System.out.print(new Sub().j);
}
}
解决方案 »
- spring有singleton和prototype作用域
- JAVA SWING 问题
- java开发问题,如何实现父窗体关闭,子窗体不关闭
- Draw2d 如何在矩形中添加2条平行线?
- 请教高手问题:在java中,我想调用windows的拷贝命令,怎么去调用啊。
- jar中的class能知道自己在哪里吗?
- 关于getScaledInstance()进行图形压缩处理的问题
- 如何判断一个String是中文字符还是英文字符组成的呢?
- 关于线程,数据库连接池问题!!!急求---------------(面临下岗呀!!!--在线等!!!!!!)
- 如何用JDBC连接SQL Server 2000的本地数据库?
- java键盘监视问题
- java程序运行后会产生什么
http://topic.csdn.net/u/20120730/01/ed1ffbf6-44bd-422d-a530-75c908590a17.html
2. 子类 print 方法
3. 子类 i = 0 赋值
4. 子类 构造器
5. 子类 print 方法
6. 子类 i = 30
7. main 输出 40
0
30
40new Sub().j
调用该new 方法,会先去调用父类的构造方法。接着就初始化父类中的成员变量,将i赋值为10.
然后进入父类方法中的print()方法。然而因为是子类中也有该方法,父类中的该方法被隐藏。
但是此时子类中的成员变量还没有被赋值成30.所以子类中的i为初始值0.-->第一个打印的数0就是这么出来的。接着回到子类自己的构造方法中,i被赋值为30.然后再调用print()方法。输出30. 接着再被赋值成40.
最后一个40是main方法里打印处理的。
http://blog.csdn.net/ada168855/article/details/7774562
在new Sub类时要先初始化父类成员变量和调用父类构造方法:
super类的构造方法中的print方法调用的是子类重写后的print方法,此时成员变量j还未初始化,默认j=0;
回到子类,初始化子类j=30,然后调用子类的构造方法中的print方法,j=30;最后打印40