程序1:
public class StaticCls{
public static void main(String[] args) {
A b = new B();
b.fb();
}
}
class A {
public A(){ }
public void fa() {
System.out.println("CLASS A :Function fa Runing......");
} public void fb() {
System.out.println("CLASS A :Function fb Runing......");
fa();
System.out.println("CLASS A :Function fb Stop......");
}
}
class B extends A {
public B(){ }
public void fa() {
System.out.println("CLASS B :Function fa Runing......");
} public void fb() {
System.out.println("CLASS B :Function fb Runing......");
super.fb();
System.out.println("CLASS B :Function fb Stop......");
}
} 和
程序2:
class MyA {
int a = 1;
public MyA() {
print();
} public void print() {
System.out.println("aaa" + a);
}
} class MyB extends MyA {
int a = 2;
public MyB() {
print();
} public void print() {
System.out.println("bbb" + a);
}
} class MyC extends MyB {
int a = 3;
public MyC() {
print();
} public void print() {
System.out.println("ccc" + a);
}
}
public class StaticCls { public static void main(String[] args) {
new MyC(); }
}
分别在 new MyC(); 和 A b = new B();设置断点。为什么 在new MyC(); 处F5跟进后,跳到 Throwable.class
public Throwable(String message, Throwable cause) {
而在 A b = new B();设置断点,F5会跳到 public B(){ }处呢?是因为 程序1中构造方法都是默认的,而2中构造方法重载了吗?
public class StaticCls{
public static void main(String[] args) {
A b = new B();
b.fb();
}
}
class A {
public A(){ }
public void fa() {
System.out.println("CLASS A :Function fa Runing......");
} public void fb() {
System.out.println("CLASS A :Function fb Runing......");
fa();
System.out.println("CLASS A :Function fb Stop......");
}
}
class B extends A {
public B(){ }
public void fa() {
System.out.println("CLASS B :Function fa Runing......");
} public void fb() {
System.out.println("CLASS B :Function fb Runing......");
super.fb();
System.out.println("CLASS B :Function fb Stop......");
}
} 和
程序2:
class MyA {
int a = 1;
public MyA() {
print();
} public void print() {
System.out.println("aaa" + a);
}
} class MyB extends MyA {
int a = 2;
public MyB() {
print();
} public void print() {
System.out.println("bbb" + a);
}
} class MyC extends MyB {
int a = 3;
public MyC() {
print();
} public void print() {
System.out.println("ccc" + a);
}
}
public class StaticCls { public static void main(String[] args) {
new MyC(); }
}
分别在 new MyC(); 和 A b = new B();设置断点。为什么 在new MyC(); 处F5跟进后,跳到 Throwable.class
public Throwable(String message, Throwable cause) {
而在 A b = new B();设置断点,F5会跳到 public B(){ }处呢?是因为 程序1中构造方法都是默认的,而2中构造方法重载了吗?
解决方案 »
- hibernate+oracle11G问题
- 有人做过地图吗?
- xsd生成xml 用程序实现 最好是java代码!
- Acegi 中的角色必须以ROLE_开始吗
- 找找!
- 对java比较乱 不知道该学习那门 技术
- 关于webwork源代码的问题,我将web-work2.2\src\java\com中的文件加到Eclipse工程中,提示很多lib找不到!请问在哪能找到源代码需要的lib
- 小女子紧急求救JavaMail接收邮件的奇怪问题
- 求助:各位大虾小弟求助怎么样拆分字符串并比对字符串!急。。。。。。
- 刚开始学EJB,问个简单问题,如何在CMP中使用关联呢?
- 开发webService
- 如何将导出的world与excel文件保存到指定的路径,而不是保存在服务器中固定的路径
public Throwable(String message, Throwable cause)这个方法
其次,构造方法是不存在重载之说的。在调用子类的构造函数时,必然会在第一个语句中显式或隐式的调用了父类的构造函数如果你不显式调用父类的构造函数,编译器会自动生成调用父类无参的构造函数语句。