当前位置: 首页 > 知识库问答 >
问题:

实例方法是否曾经使用静态绑定来解析?

林承悦
2023-03-14

在我关于静态绑定的课堂讲稿中,它给出了一个使用实例方法的示例。

示例:类动物有方法:

void dumb() {int x = 0;}

然后

Animal doudi = new Animal(); 
doudi.dumb();

这里的示例不是实例方法吗?

共有1个答案

杨鸿畅
2023-03-14

回答标题中的问题,是的,动态绑定并不总是应用于实例方法。

在调用method时,有3种情况不会发生动态绑定,即method为:

  • final-因为它不能在子类型中被重写,所以编译器确定哪个方法主体需要在运行时执行
  • private-因为private方法不是继承的,所以不能重写它们。子类型可以用相同的名称和参数类型(签名)重新声明自己的方法,但这不会被视为重写(如果没有编译错误,您不能在子类型中向此类方法添加@override注释;您可以将其返回类型从int更改为void)
  • static-因为它是在类上调用的,而不是在实例上调用的(但这不是问题的主题。简而言之,即使在编写某个animal.staticmethod()时,编译器也会看到它,就像编写animal.staticmethod())
  • 一样

...那么为什么它使用静态绑定而不是动态绑定

它不是。在您的例子中,当您调用doudi.dumb();时,编译器会看到dumb()不是finalprivate、也不是static,因此它将成为多态的主体(因此是动态绑定)。

 类似资料:
  • 本文向大家介绍java动态绑定和静态绑定用法实例详解,包括了java动态绑定和静态绑定用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java动态绑定和静态绑定用法。分享给大家供大家参考,具体如下: 背景 1.当子类和父类存在同一个方法,子类重写了父类的方法,程序在运行时调用的是父类的方法还是子类的重写方法呢(尤其是存在向上类型转换的情况)? 2.当一个类中存在方法名相同但参数

  • 问题内容: 是的方法曾经叫什么名字?如果是这样,什么时候调用它?如果开发人员未调用它,为什么会出现在其中?该功能真正发生了什么?我已经看到了删除所有表的示例,但是有一条评论说删除所有表不是您应该做的。有什么建议? 问题答案: 当您构造一个比打开的数据库版本新的SQLiteOpenHelper时,将调用它。做什么取决于新旧版本之间在数据库中所做的更改。不删除已更改的表的唯一情况是,更改所注意的不只是

  • 我们知道静态绑定发生在私有、静态、最终和重载的方法上,而动态绑定发生在被覆盖的方法上。但是如果我的方法只是公共的,它既不是静态的,也不是覆盖和重载的怎么办? 有人能给我解释一下print()的绑定会怎样,因为它既没有重载也没有被覆盖。

  • 本文向大家介绍Java静态泛型使用方法实例解析,包括了Java静态泛型使用方法实例解析的使用技巧和注意事项,需要的朋友参考一下 前言:当工具类对多个模型类进行排序,比较等操作的时候,需要书写大量重复代码,因为懒人总要想怎么省事的,所以考虑使用泛型这个玩意简化代码 案例:当前存在两个模型类,Fruit和Person,他们都需要排序方法而且业务逻辑各不相同,因此需要分别写两个排序方法,但因为排序相同的

  • 问题内容: 我正在学习Java(和OOP),尽管它可能与我现在所处的位置无关,但我想知道SO是否可以共享一些常见的陷阱或良好的设计实践。 问题答案: 要记住的一件事是静态方法不能被子类覆盖。在您的代码中对静态方法的引用实际上将其与该实现联系在一起。使用实例方法时,可以根据实例的类型来改变行为。您可以利用多态性。静态方法更适合于行为明确的功利性操作类型。例如base 64编码或计算校验和之类的事情。

  • 本文向大家介绍php5.3后静态绑定用法详解,包括了php5.3后静态绑定用法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php5.3后静态绑定用法。分享给大家供大家参考,具体如下: 手册原文: 自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。 准确说,后期静态绑定工作原理是存储了在上一个"非转发调用"(non-forward