您好,欢迎访问一九零五行业门户网

Java中的变量不遵循多态和重写

在面向对象编程 (oop) 领域,多态性和重写是为编程语言带来灵活性和活力的关键概念。 java 作为一种强大的 oop 语言,完全支持这些功能。然而,了解这些特征适用于 java 中的方法而不是变量是至关重要的。在本文中,我们将探讨为什么 java 中的变量不遵循多态性和重写,从而更深入地了解 java 的变量行为。
java 中的多态性多态性是一个希腊词,意思是“多种形式”,是 oop 的一个基本概念。它允许将不同类型的对象视为公共超类型的对象,从而可以编写更灵活和可重用的代码。在java中,多态性是通过继承、接口和方法重写来实现的。
示例让我们看一个例子
class animal { void sound() { system.out.println(the animal makes a sound); }}class cat extends animal { @override void sound() { system.out.println(the cat meows); }}public class main { public static void main(string[] args) { animal myanimal = new cat(); myanimal.sound(); }}
输出the cat meows
在此场景中,myanimal 是指向 cat 对象的 animal 引用变量。当在 myanimal 上调用 sound() 方法时,将调用 cat 类中的版本,而不是 animal 类中的版本。这就是多态性,其中要调用的方法由实际对象类型决定,而不是由引用类型决定。
java 中的重写方法重写是 java 中多态性的一种特定形式,其中子类提供其超类中已定义的方法的特定实现。子类中的方法必须与超类中的方法具有相同的名称、返回类型和参数。
为什么变量不遵循多态性和重写?为什么变量不遵循多态性和重写?与方法不同,java 中的变量不遵循多态性和重写的概念。这种差异源于方法和变量在对象中存在和操作方式的根本差异
在java中,实例变量属于类的实例,这意味着每个实例都有自己的实例变量副本。因此,更改一个对象中的实例变量的值不会影响同一类的其他对象。
另一方面,方法属于类本身,而不属于任何特定实例。这意味着方法与变量不同,对于类的每个对象没有单独的副本。
示例让我们回顾一下前面的示例,但这次添加实例变量:
class animal { string sound = the animal makes a sound; void makesound() { system.out.println(sound); }}class cat extends animal { string sound = the cat meows; @override void makesound() { system.out.println(sound); }}public class main { public static void main(string[] args) { animal myanimal = new cat(); myanimal.makesound(); system.out.println(myanimal.sound); }}
输出the cat meowsthe animal makes a sound
在此代码中,myanimal 是指向 cat 对象的 animal 引用。 myanimal 上的 makesound() 方法调用将打印“the cat meows”,但 system.out.println(myanimal.sound) 行将打印“the animalmakes a sound”。为什么会出现这种情况?由于方法遵循多态性,因此会执行 cat 类中的 makesound() 方法。但是,由于变量不遵循多态性,因此使用 animal 类中的“声音变量”
此行为是由于变量隐藏原理造成的。如果子类中的变量与其超类中的变量同名,则子类变量隐藏超类变量
这并不意味着超类变量已被覆盖。这两个变量仍然独立存在,并且使用的变量由引用类型决定,而不是由实际对象类型决定。这就是为什么当我们通过 animal 引用访问声音变量时,我们从 animal 类而不是 cat 类获取声音值。
变量覆盖与变量隐藏在 java 中,变量不受方法之类的重写的影响。相反,它们遵循变量隐藏的原则。变量隐藏和方法重写有根本的不同:​​
方法重写 - 在重写中,子类为其超类中已定义的方法提供不同的实现。调用哪个方法的决定基于实际对象的类型,而不是引用类型,这允许多态性。
变量隐藏 - 在变量隐藏中,如果子类中的变量与其超类中的变量同名,则子类变量将隐藏超类变量。使用哪个变量的决定基于引用类型,而不是实际对象的类型。
这些原则源于这样一个事实:方法是行为表示,而变量表示状态。该行为可以是多态的和重写的,允许不同类型的对象有不同的行为。相反,由变量表示的状态属于特定实例并且不是多态的。
结论总而言之,理解为什么 java 中的变量不遵循多态性和重写可以为了解 java 的工作原理提供重要的见解。这些知识对于 java 程序员在使用继承和多态性时避免误解和错误至关重要
以上就是java中的变量不遵循多态和重写的详细内容。
其它类似信息

推荐信息