多态--动态绑定

动态绑定机制(简答题)

1、当调用对象方法的时候,该方法会和该对象的运行类型绑定,如果在运行类型中没找到该方法,那么触发继承机制,去运行类型的父类去找方法。

2、当调用对象属性时,没有动态绑定机制,属性在哪里声明,就在哪里使用,不是看编译类型

1、
class A{
public int 1 = 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;
   public int sum(){
       return i + 20;
  }
   public int getI(){
       return i;
  }
   public int sum1(){
       return i + 10;
  }
}
==================================
 
public class Test{
   psvm{
       A a = new B();//向上转型
       sout(a.sum());//运行类型是B,所以这里走b的方法sum(),输出40
       sout(a.sum1());//运行类型是B,所以这里走b的方法sum1(),输出30
  }
}
   
2、※

注意:编译类型为父类,运行类型为子类 的对象,不能直接去运行子类的方法

class A{
public int 1 = 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;
  /*
   public int sum(){
       return i + 20;
   }
   */
   
   public int getI(){
       return i;
  }
   
  /*
  public int sum1(){
       return i + 10;
   }
   */
}
==================================
 
public class Test{
   psvm{
       A a = new B();//向上转型
       sout(a.sum());//30
       //运行类型B中的sum方法消失了。触发继承机制,找父类A中的sum()方法,A中sum方法getI()方法触发了动态绑定机制,去找运行类型B的getI()方法,B中getI()方法的i在B中声明,那么i的值就是20。总结下来,这里用A中的sum()=20++10方法,B的getI()=20,B的i=20,输出30
       sout(a.sum1());//20
       //运行类型B中sum1()方法消失了。触发机制,找父类A中的sum1()方法,A中sum1()方法中的i在父类A中被声明,那么这里的i=10。总结下来,这里用A中的sum()1=10+10,A的i=10,输出20
  }
}

 

posted on   老菜农  阅读(39)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

统计信息

点击右上角即可分享
微信分享提示