首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么从另一个方法中调用方法会使用同一个类中的版本,而不是被覆盖的版本?

从另一个方法中调用方法会使用同一个类中的版本,而不是被覆盖的版本,是因为方法的调用是基于类的实例的。当一个对象被实例化时,它会包含类中所有方法的副本。这意味着无论是直接调用该类的方法,还是通过其他方法间接调用,实际上都是在操作同一个类的实例。

在面向对象的编程语言中,类是用来定义对象的模板,对象是类的一个实例。每当我们实例化一个类时,都会创建一个新的对象。每个对象都有自己的内存空间,并且可以独立地执行方法。

当一个方法被调用时,它会在所属类的实例上执行。无论是在类的内部直接调用方法,还是通过其他方法间接调用,实际上都是在操作同一个对象。因此,被调用的方法总是使用同一个类中的版本,而不是被覆盖的版本。

举例来说,假设有一个名为A的类,其中包含一个方法methodA。另外还有一个方法methodB,其中调用了methodA。当我们实例化类A并调用methodB时,methodB内部的methodA调用会使用同一个实例中的methodA方法,而不是被覆盖的版本。

这种行为是为了保证代码的一致性和可靠性。如果在方法调用过程中使用被覆盖的版本,可能会导致代码逻辑混乱和不可预测的结果。因此,编程语言的设计者通常选择保持方法调用的一致性,即使在方法嵌套和间接调用的情况下也是如此。

对于云计算领域的专家和开发工程师而言,理解方法调用的行为对于设计和实现高效可靠的软件系统非常重要。在云计算中,我们可以利用这个特性来构建可靠的分布式系统,确保在各个模块之间的方法调用一致,从而提高系统的性能和可维护性。

腾讯云相关产品和产品介绍链接地址请参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

runtime官方文档翻译版本通过OC源代码通过NSObject定义方法直接调用运行时函数消息传递机制使用隐藏参数获取方法地址动态方法解析动态加载消息转发转发和多继承代理对象转发和继承类型编码声

现在运行时可以直接编译。 iPhone应用程序和64程序在OX v10.5和以后使用现在版本运行时。其他项目的使用都是以前版本运行时。...其中包括在OC讨论和协议对象定义,以及源代码中提取出来方法选择器,实例模板和其他信息。运行时主要功能就是传递消息,正如消息传递中所描述那样。它通过源代码消息表达式来来调用。...为了加速消息传递过程,在方法使用时,运行时系统缓存了方法选择器和地址。每个都有一个单独缓存,它包含了继承方法和自己定义方法选择器。...在查找调度表之前,消息例行程序首先会在接收者对象缓存查找。(理论上来说,用过一次方法很可能再次使用)如果方法选择器在缓存里面,消息传递只会比函数调用慢一点。...即使你不能继承谈判方法,你也可以通过实现一个简单传递给另一个实例消息方法一个版本来“借用”它: - (id)negotiate { if ( [someOtherObject respondsTo

1.6K70

90%Java程序员不会10道Java面试题

先来看看这10道Java面试题你几道? 1.为什么等待和通知是在 Object 不是 Thread 声明? 2.为什么Java不支持多重继承? 3.为什么Java不支持运算符重载?...2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

1K00
  • 来一场Java高级面试,看看自己啥水准

    为什么等待和通知是在 Object 不是 Thread 声明? 一个棘手 Java 问题,如果 Java编程语言不是你设计,你怎么能回答这个问题呢。...2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...创建具有相同名称和方法签名静态方法称为Java 隐藏方法。IDE 将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在 Java 重写。

    1K10

    挑战 10 道超难 Java 面试题

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    69120

    挑战10个最难回答Java面试题(附答案)

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    1.4K40

    挑战 10 道超难 Java 面试题

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    72820

    Java 大牛看过来,挑战10道超难 Java 面试题!

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    72431

    听说这10道Java面试题90%的人都不会!!!

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    63820

    挑战 10 道超难 Java 面试题

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    74510

    史上最难10道 Java 面试题!

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    84230

    10 大 Java面试难题,打趴无数面试者!

    2) 每个对象都可上锁,这是在 Object 不是 Thread 声明 wait 和 notify 另一个原因。...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...IDE将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在Java重写。 这些是我核心Java面试问题和答案清单。

    1.8K21

    10个最难回答Java面试题

    为什么 wait,notify 和 notifyAll 是在 Object 定义不是在 Thread 定义?...为什么要等待来自 Java synchronized 方法 wait方法为什么必须 Java synchronized 块或方法调用 ?...这意味着如果你使用类型来调用静态方法,那么原始静态将从父调用,另一方面如果你使用子类类型来调用静态方法,则会调用来自子类方法。简而言之,你无法在Java覆盖静态方法。...如果你使用像Eclipse或Netbeans这样Java IDE,它们将显示警告静态方法应该使用不是使用对象来调用,因为静态方法不能在Java重写。...创建具有相同名称和方法签名静态方法称为Java 隐藏方法。IDE 将显示警告:"静态方法应该使用不是使用对象来调用", 因为静态方法不能在 Java 重写。

    80820

    【Java面试总结】Java基础(下篇)

    另一个角度来看,进程属于操作系统范畴,主要是同一时间段内,可以执行一个以上程序,线程则是在同一程序内几乎同时执行一个以上程序段。 30. 线程有哪些基本状态?...使用 final 方法原因有两点:第一个原因是把方法锁定,以防任何继承修改它含义;第二个原因是效率。在早起 Java 实现版本,会将 final 方法转为内嵌调用。...但是如果方法过于庞大,可能看不到内嵌调用带来任何性能提升(现在 Java版本已经不需要使用 final 方法进行这些优化了)。中所有的 private 方法都会隐式地指定为 final。...第一个原因是把方法锁定,以防任何继承修改它含义;第二个原因是效率。在早期Java实现版本,会将final方法转为内嵌调用。...但是如果方法过于庞大,可能看不到内嵌调用带来任何性能提升(现在Java版本已经不需要使用final方法进行这些优化了)。中所有的private方法都隐式地指定为final。

    63720

    objectable_java throwable

    因此,仅仅通过实现该接口事实来克隆对象是不可能。即使反射调用clone方法,也无法保证它会成功。 #2 热门回答(63 赞) 简单回答”为什么不是Cloneable贬低?”...(原因是它们不必要地复杂了模块相互依赖性。)实际上,这些API已经开发了。 (请注意,类似的属性更改侦听器调用Pack200删除;请参阅JDK-8029806。)...但是,clone()仍然是复制数组最佳方法克隆对于精心实现实例副本有一些有限用处。删除克隆将是一个不兼容变化,破坏很多东西。...我在这里引用了相关部分;完整消息在错误报告。 Cloneable没有方法与Serializable没有相同原因。 Cloneable表示属性,不是具体说明该类支持方法。...在反射之前,我们需要一个本机方法来制作一个Object浅表副本。因此,Object.clone()诞生了。很明显,许多都希望覆盖方法,并且不是每个都希望克隆。

    42240

    @Bean与@Component用在同一个上,怎么样?

    结果验证 验证方式有很多,可以 debug 跟源码,看看 Spring 容器到底有几个 UserManager 对象,也可以直接 UserManager 构造方法下手,看看哪几个构造方法调用,等等...我们构造方法下手,看看 UserManager 到底实例化了几次。 图片 只有有参构造方法调用了,无参构造方法岿然不动(根本没被调用)。...注意,此刻@Bean处理还未开始,UserManager是通过@Component扫描出来;此时Spring容器beanDefinitionMap UserManager是这样。...后续通过BeanDefinition创建实例时候,创建自然就是@Configuration+@Bean修饰 UserManager,也就是反射调用UserManager有参构造方法。...这种处理方式是更优,将选择权交给开发人员,不是自己偷偷处理,已达到开发者想要效果。

    25910

    关于Java基础34个问题

    总结: Oracle JDK版本将每三年发布一次,OpenJDK版本每三个月发布一次; OpenJDK 是一个参考模型并且是完全开源Oracle JDK是OpenJDK一个实现,并不是完全开源...成员变量与局部变量区别有那些 语法形式上,看成员变量是属于局部变量是在方法定义变量或是方法参数;成员变量可以 public,private,static 等修饰符所修饰,局部变量不能访问控制修饰符及...static 所修饰;但是,成员变量和局部变量都能 final 所修饰; 变量在内存存储方式来看:如果成员变量是使用 static修饰,那么这个成员变量是属于,如果没有使用使用 static...而对象存在于堆内存,局部变量存在于栈内存 变量在内存生存时间上看:成员变量是对象一部分,它随着对象创建存在,局部变量随着方法调用自动消失。...对象相等,比是内存存放内容是否相等。引用相等,比较是他们指向内存地址是否相等。 25. 在调用子类构造方法之前调用没有参数构造方法,其目的是? 帮助子类做初始化工作。

    1.7K50

    Spring 容器到底有几个 UserManager 类型对象?

    跟源码,看看 Spring 容器到底有几个 UserManager 对象,也可以直接 UserManager 构造方法下手,看看哪几个构造方法调用,等等 我们构造方法下手,看看 UserManager...到底实例化了几次 只有有参构造方法调用了,无参构造方法岿然不动(根本没被调用) 既然 UserManager 构造方法调用了一次,那么前面的问题:到底注入是哪个对象 答案也就清晰了,没得选了呀..., 那么我们 AbstractApplicationContext refresh 方法调用 invokeBeanFactoryPostProcessors(beanFactory)开始,来跟下源码...都被扫描出来 注意,此刻@Bean 处理还未开始, UserManager 是通过@Component 扫描出来;此时 Spring 容器 beanDefinitionMap UserManager...+ @Bean 与@Component 同时作用于同一个 启动时会给 info 级别的日志提示,同时会将@Configuration + @Bean 修饰 BeanDefinition 覆盖掉@Component

    33520

    【附答案】关于Java基础你不得不会34个问题

    总结: Oracle JDK版本将每三年发布一次,OpenJDK版本每三个月发布一次; OpenJDK 是一个参考模型并且是完全开源Oracle JDK是OpenJDK一个实现,并不是完全开源...成员变量与局部变量区别有那些 语法形式上,看成员变量是属于局部变量是在方法定义变量或是方法参数;成员变量可以 public,private,static 等修饰符所修饰,局部变量不能访问控制修饰符及...static 所修饰;但是,成员变量和局部变量都能 final 所修饰; 变量在内存存储方式来看:如果成员变量是使用 static修饰,那么这个成员变量是属于,如果没有使用使用 static...而对象存在于堆内存,局部变量存在于栈内存 变量在内存生存时间上看:成员变量是对象一部分,它随着对象创建存在,局部变量随着方法调用自动消失。...对象相等,比是内存存放内容是否相等。引用相等,比较是他们指向内存地址是否相等。 25. 在调用子类构造方法之前调用没有参数构造方法,其目的是? 帮助子类做初始化工作。

    47730

    关于Java基础你不得不会34个问题

    总结: Oracle JDK版本将每三年发布一次,OpenJDK版本每三个月发布一次; OpenJDK 是一个参考模型并且是完全开源Oracle JDK是OpenJDK一个实现,并不是完全开源...成员变量与局部变量区别有那些 语法形式上,看成员变量是属于局部变量是在方法定义变量或是方法参数;成员变量可以 public,private,static 等修饰符所修饰,局部变量不能访问控制修饰符及...static 所修饰;但是,成员变量和局部变量都能 final 所修饰; 变量在内存存储方式来看:如果成员变量是使用 static修饰,那么这个成员变量是属于,如果没有使用使用 static...而对象存在于堆内存,局部变量存在于栈内存 变量在内存生存时间上看:成员变量是对象一部分,它随着对象创建存在,局部变量随着方法调用自动消失。...对象相等,比是内存存放内容是否相等。引用相等,比较是他们指向内存地址是否相等。 25. 在调用子类构造方法之前调用没有参数构造方法,其目的是? 帮助子类做初始化工作。

    94820

    java面试(基础-1)

    设计层面来说,抽象是对抽象,是一种模板设计,接口是对行为抽象,是一种行为规范。 备注:在JDK8,接口也可以定义静态方法,可以直接用接口名调用。实现和实现是不可以调用。...语法形式上看:成员变量是属于局部变量是在方法定义变量或是方法参数;成员变量可以 public,private,static 等修饰符所修饰,局部变量不能访问控制修饰符及 static...变量在内存生存时间上看:成员变量是对象一部分,它随着对象创建存在,局部变量随着方法调用自动消失。...静态方法和实例方法有何不同 在外部调用静态方法时,可以使用"名.方法名"方式,也可以使用"对象名.方法名"方式。实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。...对象相等,比是内存存放内容是否相等。引用相等,比较是他们指向内存地址是否相等。 25. 在调用子类构造方法之前调用没有参数构造方法,其目的是? 帮助子类做初始化工作。

    58360
    领券