Java中的静态方法可以重载。
让我们看一个例子-
public class Demo{ public static void test(){ System.out.println("Demo类test函数已被调用"); } public static void test(int val){ System.out.println("带有参数的Demo类test函数已被调用"); } public static void main(String args[]){ System.out.println("在主类中,调用了Demo类的方法"); Demo.test(); Demo.test(57); } }
输出结果
在主类中,调用了Demo类的方法 Demo类test函数已被调用 带有参数的Demo类test函数已被调用
名为Demo的类包含一个名为“ test”的函数,该函数可打印特定消息。它还定义了另一个名为“ test”的函数,该函数以整数值作为参数。在main函数中,调用test函数时不带参数和带整数参数。相关消息将显示在控制台上。
Java中的静态方法不能被覆盖。具有相同签名的静态方法可以在子类中定义,但不会是运行时多态。因此,无法覆盖。这是一个例子-
class base_class{ public static void show(){ System.out.println("来自基类的静态或类方法"); } public void print_it(){ System.out.println("来自基类的非静态方法或实例方法"); } } class derived_class extends base_class{ public static void show(){ System.out.println("派生类的静态或类方法"); } public void print_it(){ System.out.println("派生类的非静态方法或实例方法"); } } public class Demo{ public static void main(String args[]){ base_class my_instance = new derived_class(); System.out.println("创建基类实例。"); my_instance.show(); System.out.println("函数show被调用"); my_instance.print_it(); System.out.println("函数print_it被调用"); } }
输出结果
创建基类实例。 来自基类的静态或类方法 函数show被调用 派生类的非静态方法或实例方法 函数print_it被调用
基类有一个名为“ show”的静态函数,可打印一条消息。同样,另一个名为“ print_it”的函数也会打印一条消息。类是从继承这两个函数的基类派生的。名为Demo的类包含主函数,该函数创建派生类型为class的基类的实例。 相关消息将显示在控制台上。
static方法不能被实例方法覆盖,实例方法不能被static方法重载。
我想知道: 为什么在Java中不能重写静态方法? 静态方法可以在Java中重载吗?
问题内容: Java不允许覆盖静态方法,但是, 在这里没有覆盖吗? 问题答案: 这是“隐藏”,而不是“覆盖”。要看到这一点,请将方法更改为以下内容: 这应该打印: 如果正在进行真正的覆盖,那么您会看到: 通常认为使用实例类型来调用静态方法是一种不好的方式,就像您正在做的那样,因为很容易想到您正在调用实例方法,并且容易误以为重写正在发生。Java样式检查器/代码审核工具通常会将其标记为样式错误/潜在
问题内容: 我知道我可以使用反射来调用私有方法,并获取或设置私有变量的值,但是我想重写一个方法。 我希望方法 可以打印出来,但是可以打印出来。我听说这可以通过反思来完成,但是我不知道怎么做。如果不是反思,有谁知道另一种方式吗?(除了使方法受保护,或者将方法复制并粘贴到。)如果实际上无法覆盖私有方法,是否可以在其上放置某种触发器以在子类之前或之后调用我的子类中的方法?私有方法执行后? 问题答案: 私
问题内容: 在子类的对象上,可以使用父类的静态方法,但是当我们在子类中定义相同的方法时,现在子类的对象开始指向子类的方法。这听起来像是覆盖了,但并非如此,因为静态方法可以t覆盖。这是怎么发生的,以及Java的此功能称为什么? 这似乎很重要,但不是.jdk如何管理它?由于我的垃圾平板电脑,我感到抱歉。 问题答案: 由于extends ,(您通过调用创建的)实例将具有所有方法。因此,如果调用的实例,则
我试图理解重载和重写静态和非静态方法是如何工作的。事实上,我试图理解这些方法如何能够和不能出现在父类和子类中。我想出了下面的规则: 我们不能重写静态方法,只能隐藏它们。通过隐藏,我们的意思是在编译时根据引用变量类型决定执行哪个方法,而不是重写(,在运行时根据实例类型选择哪个方法执行)。 例如,让,然后隐藏. 我们可以重写实例方法。 例如重写. 两个或多个具有相同签名的方法不能以静态或非静态组合形式
问题内容: 为什么无法覆盖静态方法? 如果可能,请使用示例。 问题答案: 覆盖取决于拥有类的实例。多态性的重点是可以对一个类进行子类化,并且实现那些子类的对象对于在超类中定义的相同方法(在子类中被重写)将具有不同的行为。静态方法未与类的任何实例相关联,因此该概念不适用。 影响Java设计的因素有两个。一个是对性能的关注:Smalltalk批评它太慢(垃圾回收和多态调用是其中的一部分),Java的创