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 }
想多了都是问题,做多了才是答案
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性