关闭

Java程序初始化过程中方法覆盖问题

标签: javatemplatesclassstringgo
820人阅读 评论(0) 收藏 举报
分类:
 代码如下:
/*
 * 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);
    }

}
最后输出i的值为22

分析:按照之前一篇文章总结在主函数中,首先执行new MyBase(),在这个过程中,子类会首先调用父类的构造函数Base(),但Base()函数执行add()方法时特别需要注意, 这个add方法由于是在新建MyBase对象时调用的,所以将会首先查找MyBase类中是否有此方法。所以Base函数中的add(1)实际上是执行的乘2的方法。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:472977次
    • 积分:5397
    • 等级:
    • 排名:第4952名
    • 原创:51篇
    • 转载:174篇
    • 译文:1篇
    • 评论:59条
    最新评论