java动态绑定机制

知识点:

1.当调用对象方法的时候,该方法会和该对象的内存地址或者运行类型进行绑定

2.当调用对象属性时候,没有动态绑定机制,哪里声明,哪里使用。

 

复制代码
 1 package com.polymorhic;
 2 
 3 public class DynamicBinding {
 4     public static void main(String[] args) {
 5 
 6         //a的编译类型是A.  a的运行类型是B
 7         A a = new B();//向上转换
 8       //System.out.println(a.sum());//输出结果40
 9         //System.out.println(a.sum1());//输出结果30
10         /**
11          * 如果把子类(B)中的sum、sum1这两个方法去掉再求
12          * 那么这个的输出结果有为多少?
13          * a.sum首先a的运行类型是B,所以先去子类B中找sum方法,如果没有,根据继承机制
14          * 再往父类A中找sum,父类A中有sum,但是返回类型中,有未知getI()方法,这里就用到了动态绑定机制
15          * 1.当调用对象方法的时候,该方法会和该对象的内存地址或者运行类型进行绑定
16          * 2.当调用对象属性时候,没有动态绑定机制,哪里声明,哪里使用。
17          *调用getI()方法,需要去看子类B中的getI(),B中的getI方法返回i=20,这时候有返回到
18          * 父类A中的sum()进行相加20+10为30
19          */
20         System.out.println(a.sum());//输出30
21 
22         //下面的方法同上;
23         System.out.println(a.sum1());//20
24     }
25 }
26 
27 //java 动态绑定机制
28 
29 class  A{
30     public  int i =10;
31     public int sum(){
32         return getI()+10;
33     }
34     public int sum1(){
35         return i+10;
36     }
37     public int getI(){
38         return i;
39     }
40 }
41 
42 class B extends A{
43     public  int i =20;
44 //    public int sum(){
45 //        return i+20;
46 //    }
47     public  int getI(){
48         return i;
49     }
50 //    public int sum1(){
51 //        return i+10;
52 //    }
53 
54 }
复制代码

 

posted @   捞月亮的渔夫  阅读(95)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示