动态绑定机制

//测试类
public class Dynamic {
    public static void main(String[] args) {
        A a = new B();
        System.out.println(a.sum());
        System.out.println(a.sum1());
    }
}
class A {
    public int i = 10;

    public int sum() {
        return getI() + 10;
    }

    public int sum1() {
        return i + 10;
    }

    public int getI() {
        return i;
    }
}

class B extends A {
    public int i = 20;

    @Override
    public int sum() {
        return i + 20;
    }

    @Override
    public int sum1() {
        return i + 10;
    }

    @Override
    public int getI() {
        return i;
    }
}

运行结果如下

 

 

class A {
    public int i = 10;

    public int sum() {
        return getI() + 10;//此时的getI()调用的是对象运行类型的i
    }

    public int sum1() {
        return i + 10;
    }

    public int getI() {
        return i;
    }
}

class B extends A {
    public int i = 20;

//    @Override
//    public int sum() {
//        return i + 20;
//    }

    @Override
    public int sum1() {
        return i + 10;
    }

    @Override
    public int getI() {
        return i;//调用了本类的i并传给上面的getI()
    }
}

运行结果如下

 

 

class A {
    public int i = 10;

    public int sum() {
        return getI() + 10;
    }

    public int sum1() {
        return i + 10;//这里调用的是本类的i
    }

    public int getI() {
        return i;
    }
}

class B extends A {
    public int i = 20;

//    @Override
//    public int sum() {
//        return i + 20;
//    }

//    @Override
//    public int sum1() {
//        return i + 10;
//    }

    @Override
    public int getI() {
        return i;
    }
}

运行结果如下

 

posted @ 2022-02-07 15:15  香草ovo  阅读(31)  评论(0编辑  收藏  举报