代码如下:
最后输出i的值为22
分析:按照之前一篇文章总结在主函数中,首先执行new MyBase(),在这个过程中,子类会首先调用父类的构造函数Base(),但 Base()函数执行add()方法时特别需要注意, 这个add方法由于是在新建MyBase对象时调用的,所以将会首先查找MyBase类中是否有此方法。所以Base函数中的add(1)实际上是执行的乘2的方法。
/*
* Test.java
*
* Created on 2007-10-4, 19:32:43
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Jeffery
*/
class Base {
int i;
Base() {
add(1);
System.out.println("Base" + this.i);
}
void add(int i) {
this.i += i;
System.out.println("Base add i" + this.i);
}
}
class MyBase extends Base {
MyBase() {
add(2);
System.out.println("Mybase" + this.i);
}
void add(int i) {
this.i += i * 2;
System.out.println("Mybase add i" + this.i);
}
}
public class Test {
public static void main(String[] args) {
go(new MyBase());
}
static void go(Base b) {
b.add(8);
}
}
* Test.java
*
* Created on 2007-10-4, 19:32:43
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Jeffery
*/
class Base {
int i;
Base() {
add(1);
System.out.println("Base" + this.i);
}
void add(int i) {
this.i += i;
System.out.println("Base add i" + this.i);
}
}
class MyBase extends Base {
MyBase() {
add(2);
System.out.println("Mybase" + this.i);
}
void add(int i) {
this.i += i * 2;
System.out.println("Mybase add i" + this.i);
}
}
public class Test {
public static void main(String[] args) {
go(new MyBase());
}
static void go(Base b) {
b.add(8);
}
}
分析:按照之前一篇文章总结在主函数中,首先执行new MyBase(),在这个过程中,子类会首先调用父类的构造函数Base(),但 Base()函数执行add()方法时特别需要注意, 这个add方法由于是在新建MyBase对象时调用的,所以将会首先查找MyBase类中是否有此方法。所以Base函数中的add(1)实际上是执行的乘2的方法。