请帮我看看这段JAVA程序,给我讲解一下

来源:百度知道 编辑:UC知道 时间:2024/05/29 18:59:44
public class student3 ectends student1
{
void print()
{
System.out.println("这是小明的同学“);
}
public static void main(String[] args)
{
student3 st=new student3();
student1 st1=new student1();
st.print();
st1.print();
}
}
class student1
{
void print()
{
System.out.println("这是小明的同学");
System.out.println("他很优秀的");
}
}

为什么输出是:
这是小明的同学
这是小明的同学
他很优秀的

我怎么认为它输出应该是:
这是小明的同学
他很优秀的
这是小明的同学

public class student3 ectends student1
{
void print()
{
System.out.println("这是小明的同学“);//重写了父类中的print方法
}
public static void main(String[] args)
{
student3 st=new student3();
student1 st1=new student1();
st.print();//首先调用的是student3类中重写的print方法。
st1.print();//其次调用的是student1父类中的print方法。
}
}
class student1
{
void print()
{
System.out.println("这是小明的同学");
System.out.println("他很优秀的");
}
}
根据以上程序的运行结果为:
这是小明的同学
这是小明的同学
他很优秀的
如果将st.print();和st1.print();在程序中调换位置,则是楼主认为的输出结果:
这是小明的同学
他很优秀的
这是小明的同学

你看main函数的调用顺序就知道了,首先new一个student3对象,然后有new一个student1对象,接着打印st也就是student3里的内容,然后打印st1,也就是student1里的内容!

student3中的print覆盖(重写)了父类了print方法,你new student3();
然后:st.print(); 调用的是student3这个类的print方法,所以打印“这是小明的同学”,下面又new了一个父类对象,调用父类的print方法,就打印的:“这是小明的同学
他很优秀的”