java 关于多态

来源:百度知道 编辑:UC知道 时间:2024/05/22 17:52:59
abstract class A
{
public A()
{
this.print();
}
public abstract void print();
}
class B extends A
{
private int i = 30;
public B(int i)
{
this.i = i;
}
public void print()
{
System.out.println("i = "+i);
}
}
public class Demo03
{
public static void main(String args[])
{
new B(50);
}
}输出结果为0 ?
为什么?

程序是这样走的,new B(50)的时候,先找到A类的构造函数,构造函数里 有个print()方法,接着调用B类的print()方法,由于这时B类还没实例化,加载类的时候属性都会被置为默认值,所以i的值是0;你写点输出看看程序走的顺序就明白了,先调用父类的构造函数再调用子类的!
abstract class A
{
public A()
{
System.out.println("A");
this.print();
}
public abstract void print();
}
class B extends A
{
private int i = 30;
public B(int i)
{
System.out.println("B");
this.i = i;
this.print();
}
public void print()
{
System.out.println("C");
System.out.println("i = "+i);
}
}
public class Demo03
{
public static void main(String args[])
{
new B(50);
}
}
运行看看就明白了

二楼解释的很清楚了。
楼主你弄清楚程序的执行步骤。

应该是输出i=30吧,你要输出50,在B类的构造器里面也加上this.print()就可以了