Java 中的重写和重载静态方法
在本文中,我们将讨论 Java 中是否可以覆盖和重载静态方法。 但在我们进一步讨论之前,让我们先明确几个关键点:
Java 面向对象的本质使得重写和重载变得至关重要。 当程序员需要多功能性时,他们可以利用此功能。
方法重载
编译时多态性,也称为静态多态性,与重载密切相关,重载是面向对象编程语言(如 Java)的另一个特征。 此函数允许许多方法具有相同的名称,同时具有不同的签名。
这些签名可能以各种方式变化,包括输入参数的数量和输入参数的类型。
静态方法
静态方法是以 static
关键字开头的方法。 类级方法是这个概念的另一个名称。
静态函数可通过标准实现供所有类实例使用。
方法重写
重写是 Java 等面向对象编程语言的一项功能,可促进运行时的多态性。 超类中定义的方法通常在子类或派生类中实现。
调用对象决定在运行时执行哪个实现。 重要的是要记住,两种方法的签名必须相同。
在解释了方法重载和重写之后,我们将讨论 Java 中是否可以重写或重载静态方法。
在 Java 中重载静态方法
是的,我们可以重载静态方法。 但是,重要的是要记住方法签名必须是唯一的,否则我们可以有两个或多个具有相同名称但输入参数不同的静态方法。
请考虑以下示例以更好地理解这个概念:
-
在下面的示例中,我们创建了两个静态方法,名为:
public static void A() {} public static void Z(int b) {}
-
之后,我们只需在这些方法中填充一些要在调用时显示的数据,如下所示:
public static void A() { System.out.println(" A() method is called: Hi, Muhammad Zeeshan here. "); }
-
最后,在
main()
方法中调用这两个方法来重载它们:public static void main(String args[]) { Shani.A(); Shani.Z(2); }
完整代码:
public class Shani {
public static void A() {
System.out.println(" A() method is called: Hi, Muhammad Zeeshan here. ");
}
public static void Z(int b) {
System.out.println(" Z(int b) method is called: Hello, Programmers. ");
}
public static void main(String args[]) {
Shani.A();
Shani.Z(2);
}
}
当我们通过调用 main()
方法来重载方法时,我们将得到如下输出:
A() method is called: Hi, Muhammad Zeeshan here.
Z(int b) method is called: Hello, Programmers.
在 Java 中重写静态方法
静态方法在编译时使用静态绑定进行绑定。 这就是为什么我们不能重写它们,因为方法重写是以运行时动态绑定为基础的,而静态方法已经在运行时使用动态绑定进行了绑定。
因此,我们无法重写静态方法。
让我们看下面的例子来更好地理解:
- 下面的 Tree 和 Root 类都具有相同的方法签名,即名为 Show() 的静态方法。 Root 的隐藏方法覆盖了基类的原始函数。
- 在 Root 类的对象上调用静态方法将调用 Root 类的静态方法。
-
在
main()
方法中,当我们通过传入 Tree 类的对象来调用静态方法时,会调用原始静态方法,如下例所示:
public class Shani {
public static void main(String args[]) {
Tree t = new Root();
t.Show();
}
}
完整代码:
public class Shani {
public static void main(String args[]) {
Tree t = new Root();
t.Show();
}
}
class Tree {
public static void Show() {
System.out.println(" Show() method of the *Tree* class "); }
}
class Root extends Tree {
public static void Show() {
System.out.println(" Overridden static method in *Root* class in Java "); }
}
输出:
Show() method of the *Tree* class
相关文章
如何在 Java 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,