Java 中的阴影10 Sept 2024 | 4 分钟阅读 影射 (Shadowing) 是面向对象编程范式中的一个概念。它在不覆盖基类成员的情况下为其提供新的实现。影射和隐藏是相同的概念,但用于不同的上下文。它们是编译时过程。在本节中,我们将通过示例讨论 Java 中的变量和方法影射的概念。 OOP 中的影射是什么?影射是一种计算机编程现象,其中在某个作用域(如决策块、方法或内部类)中声明的变量与包围作用域的另一个声明具有相同的名称。在这种情况下,该声明会影射包围作用域的声明。 简单来说,基类成员的原始实现会被派生类中提供的基类成员的新实现所影射(隐藏)。影射实际上是隐藏派生类中被覆盖的方法实现,并通过派生类对象调用父类的实现。 另外,请注意,被影射的元素无法通过名称单独引用,而是当代码使用元素名称时,编译器会将其解析为影射的元素。我们无法仅凭名称引用被影射的声明。这个概念就像掩码,所以它也被称为名称掩码 (name masking)。 变量影射与变量隐藏Java 允许我们声明三种类型的变量
如果实例变量和局部变量具有相同的名称,并且我们想打印实例变量,在这种情况下,它将打印局部变量而不是实例变量。 当我们打印在方法中声明的变量时,将会在控制台上打印局部值。因此,我们可以说局部变量影射了实例变量。 让我们通过一个 Java 程序来理解影射的概念。 在下面的程序中,我们定义了两个变量,即 name 和 age,它们也在 display() 方法中定义。在类声明之后定义的变量称为实例变量,在方法内部声明的变量称为局部变量。 Shadowing.java 输出 Car Name: Bugatti Price: 43000000 如果也想在方法中访问实例变量怎么办?我们可以使用 this 关键字来访问实例变量。考虑以下程序。 Shadowing.java 输出 Car Name: Bugatti Price: 43000000 Car Name: Ferrari Price: 50000000 让我们看另一个 Java 程序,用于相同目的。 Shadow.java 输出 x = 12 this.x = 1 Shadow.this.x = 0 方法影射方法影射的概念与方法覆盖的概念相同。实例方法在超类和子类中都有定义。当我们调用子类的方法时,超类的方法会被子类覆盖。这个概念称为方法影射。 MethodShdowing.java 输出 display() method of the subclass invoked. 请注意,静态方法不能被实例方法影射,因为它会导致歧义。但是,静态变量可以被实例变量影射(仅适用于子类)。考虑以下代码片段。 结论OOP 中的影射和隐藏是描述同一事物的两个不同词语,但上下文不同。 隐藏与多态性相关,而影射则不然。当我们谈论隐藏时,意味着我们在讨论继承,其中派生类方法隐藏了来自正常继承方法调用链的基类方法。 另一方面,当我们谈论影射时,意味着我们在谈论作用域(如决策块、方法或内部类)。有时隐藏也被称为影射。 下一主题Java 中的文件压缩和解压缩 |
计数排序是 Java 中最常用的排序技术之一,它基于特定范围内的键。计数排序不通过比较元素来执行排序。它通过计数具有不同键值的对象来执行排序,例如哈希。之后,它执行一些...
阅读 4 分钟
Java LinkedHashMap 与 HashMap LinkedHashMap 与 HashMap 非常相似,并增加了维护插入元素顺序的功能。HashMap 提供了插入、删除和搜索元素的简便方法,但它不提供维护和跟踪……
阅读 10 分钟
为什么非静态变量不能从静态上下文中引用? 在 Java 中,非静态变量无法从静态上下文中引用的错误通常是初学者在编译 Java 程序时遇到的。此错误发生的原因是...
5 分钟阅读
在编程世界中,数据操作是一项常见的任务,我们经常会遇到需要组合或合并两个包含相似键的映射的情况。Java 8 凭借其增强的功能和能力,为应对这些挑战提供了优雅的解决方案。在本...
阅读 3 分钟
在 Java 中,旅行商问题(TSP)是一个需要找到一条最短路线,该路线恰好经过每个城市一次并返回到起点的问题。哈密顿回路(Hamiltonian Cycle)是 Java 中的另一个问题,与 TSP 非常相似。它们之间的主要区别在于 TSP...
阅读 4 分钟
复数由两个分量组成——实数和虚数,它们是不同的。这些数字在数学中,特别是在代数中,被广泛使用。复数的标准格式为 a + bi,其中“a”表示实数...
阅读 4 分钟
Java 中的主线程是任何 Java 程序的关键组件。当 Java 程序启动时,线程会自动创建,并维护应用程序的 main() 方法。main() 方法作为程序的入口点,是初始方法...
阅读9分钟
AWT 代表抽象窗口工具包,它是一个用于在 Java 中创建图形用户界面 (GUI) 的应用程序编程接口 (API)。它允许 Java 程序员开发基于窗口的应用程序。AWT 提供了按钮、标签、复选框等各种组件,它们在 Java 程序中用作对象。AWT 组件使用...
阅读 3 分钟
Java 使用一种称为 Java 数字提升的机制,以便在执行运算时将各种数据类型转换为单一类型。在操作数可能属于不同类型的情况下,这尤其重要。理解数字提升的机制可以帮助...
5 分钟阅读
在 Java 中,main 方法用于控制台输出,在调试和用户指示时提供。它是 java.lang 包中 System 类的一部分,并且所有 Java 程序都可以继承它,而无需导入任何包。以下是详细介绍...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India