静态与动态绑定逻辑

2024-03-06

我有以下代码:

import java.lang.*;

public class Program
{
    public static void main(String [] args) 
    { 
        B a = new A(); 

        a.p(10);  
        a.p(10.0); 
    } 
} 
    class B { 
        public void p(double i) 
        { 
            System.out.println(i*2); 
        } 
    }

    class A  extends B{ 
        public void p(int i) 
        { 
            System.out.println(i); 
        } 
    } 

当我使用执行此代码时B a = new A(),我在这两种情况下都得到 20.0,这是有道理的,因为重载是在编译时处理的,编译器会查看声明的类型并适当地调用函数。由于我们声明的类型是类 B,因此在两种情况下都会调用类 B 的方法。现在如果我这样做A a = new A();,我的两个答案都应该得到 10 分,但我没有。我得到 10a.p(10)20.0 为a.p(10.0)。基于静态绑定的概念和通过静态绑定完成的重载的整体概念,静态绑定查看声明的类型而不是实际类型,为什么结果会这样出现?我非常感谢你的帮助。


An int可以扩大到double,但反之则不然。这意味着10可以打电话B.p(double) or A.p(int) but 10.0 is a double并且不会被隐式转换为int即仅B.p(double)将被调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态与动态绑定逻辑 的相关文章

随机推荐