首页
学习
活动
专区
工具
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面试问题和答案的清单。

    69820

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

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

    64120

    挑战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面试问题和答案的清单。

    73420

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

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

    72931

    挑战 10 道超难 Java 面试题

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

    75310

    10个最难回答的Java面试题

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

    81920

    史上最难10道 Java 面试题!

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

    85230

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

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

    1.8K21

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

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

    64820

    objectable_java throwable

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

    43040

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

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

    27210

    关于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

    34520

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

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

    47930

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

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

    95820

    java面试(基础-1)

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

    59160
    领券