java程序员来帮下忙~!!

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:24:48
class A
{
public void func1()
{
System.out.println("A func1 is calling");
}
public void func2()
{
func1();
}
}
class B extends A
{
public void func1()
{
System.out.println("B func1 is calling");
}
public void func3()
{
System.out.println("B func3 is calling");
}
}
class C
{
public static void main(String [] args)
{
B b=new B();
A a = b;
callA(a);
callA(new B());
}
public static void callA(A a)
{
a.func1();
a.func2();
}
}

我是菜鸟,在自己学J,但是老看不明白代码的运算顺序~!!有时候算上面,有时候算下面,我自己都看糊涂了~!!
哪位能拿上段代码,帮我解释下他的运算顺序和方式吗???
我不是要代码的意思,我是想知道代码的运算顺序~!!!!!!!!!!
看我的理解对不?
程序是从public static void main(String [] args) 开始运行吗?
那CLASS B和A用来做什么的啊?

这段代码的运行结果是:
B func1 is calling
B func1 is calling
B func1 is calling
B func1 is calling
这段代码的运行时从class C 的 main方法开始的:
1、初始化了一个B对象 b
2、初始化一个A对象 a 并将其引用指向 b
3、当调用callA(a)时,实际的参数引用是B对象
4、B对象的func1()func2()你应该知道是怎么回事了
5、调用callA(new B())时,这个应该不用我说了

上面代码的主要就是要理解java的多态机制,类B已经将类A的func1()重写了。

你看 main方法里的代码按顺序执行就行了 ~~~
public static void main(String [] args)
{
B b=new B();
//创建一个B类型的引用变量b 并且赋值
A a = b;
//创建一个A类型的引用变量a 并且赋值(这里用到了多态)
//下边这2句意思是一样的 调用call()方法 这个方法需要传入1个A类型的对象为参数
callA(a);
callA(new B());
}

callA(a); 的结果和callA(new B());的结果是一样的。因为其实他们就是一样的。 public static void callA(A a) 这个方法的参数是A类型的当调用callA(new B())的时候你传进来是一个A的子类B类的对象。所以要先上传成A类型。即跟你写的B b=new B();A a = b; 的结果是一样的。所以不管调用的是A的func1,func2,还是调用的是B的func1,func2其结果是一样的。然后说一下为什么两次调用的都是B的func1,func2。因为你传给callA的参数的类型是B只是上传成A类型的。所以当你执行的时候先下传成原类型调用相应方法。

先去把java继承、多态、重载学学就懂了