B
Bkhswrp
Unregistered / Unconfirmed
GUEST, unregistred user!
//: c06:Chess.java
// From 'Thinking in Java, 2nd ed.' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
// Inheritance, constructors and arguments.
class BoardGame {
int m=100;
BoardGame(){
System.out.println("Haha,let's begin
:");
pp();
System.out.println("m = "+m);
}
void pp(){
System.out.println("pp 1"+"m = "+m);
}
}
public class Chess extends BoardGame {
int m=130;//(1)
//static int m=130;//(2)
Chess(String ss){
System.out.println(ss);
}
void pp(){
System.out.println("pp 2"+"m = "+m);
}
public static void main(String[] args) {
Chess y = new Chess("The end.
");
}
} ///:~
/*
问题1:很简单,成员函数可以重载,成员数据可不可以重载,是不是叫重载。
问题2:Chess y = new Chess("The end.
")调用后,首先执行的是BoardGame(),
BoardGame()里面有个pp(),真正执行的却是子类BoardGame重载的pp;BoardGame()
里面还有调用m的操作(System.out.println("m = "+m);),真正访问的m却是
父类定下的m;
问题3:另外一个奇怪的现象是因为子类和父类的pp都调用了m,而根据运行情况,
调用的应该是子类定下的m,但是上面的代码运行得到pp 2m = 0;把(1)语句去
掉换成(2)语句执行却得到pp 2m=130.我就纳闷了,很纳闷。
问题4:有谁能够透彻的讲一下继承情况下初始化和构造函数的运行机制?
*/
// From 'Thinking in Java, 2nd ed.' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
// Inheritance, constructors and arguments.
class BoardGame {
int m=100;
BoardGame(){
System.out.println("Haha,let's begin
:");
pp();
System.out.println("m = "+m);
}
void pp(){
System.out.println("pp 1"+"m = "+m);
}
}
public class Chess extends BoardGame {
int m=130;//(1)
//static int m=130;//(2)
Chess(String ss){
System.out.println(ss);
}
void pp(){
System.out.println("pp 2"+"m = "+m);
}
public static void main(String[] args) {
Chess y = new Chess("The end.
");
}
} ///:~
/*
问题1:很简单,成员函数可以重载,成员数据可不可以重载,是不是叫重载。
问题2:Chess y = new Chess("The end.
")调用后,首先执行的是BoardGame(),
BoardGame()里面有个pp(),真正执行的却是子类BoardGame重载的pp;BoardGame()
里面还有调用m的操作(System.out.println("m = "+m);),真正访问的m却是
父类定下的m;
问题3:另外一个奇怪的现象是因为子类和父类的pp都调用了m,而根据运行情况,
调用的应该是子类定下的m,但是上面的代码运行得到pp 2m = 0;把(1)语句去
掉换成(2)语句执行却得到pp 2m=130.我就纳闷了,很纳闷。
问题4:有谁能够透彻的讲一下继承情况下初始化和构造函数的运行机制?
*/