gpt4 book ai didi

java - 为什么静态方法不能在java中隐藏实例方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:18 24 4
gpt4 key购买 nike

class TestOverriding {

public static void main(String aga[]) {
Test t = new Fest();
t.tests();
}
}

class Test {
void tests() {
System.out.println("Test class : tests");
}
}
class Fest extends Test {
static void tests() {
System.out.println("Fest class : tests");
}
}

测试类是父类(super class),Fest 是它的子类,因为我们知道即使这样静态方法也不能被覆盖,我收到类似“静态方法无法在 Java 中隐藏实例方法”的错误,有人可以解释一下吗,在此先感谢。

最佳答案

术语覆盖通常用于对象,因为使用相同的父引用,您可以从给定的子对象调用不同的方法。以这种方式,静态方法不能被覆盖,因为它们与引用类型相关联,而不是对象类型。

如何覆盖?您在基类中指定一个方法,并在子类中放置相同的签名,这会自动覆盖该方法。如果您注意到,静态方法也是继承的,即如果父类包含静态方法,那么它可以被子类引用使用。例如:

public class TestOverriding {

public static void main(String aga[]) {
Fest t = new Fest();
t.tests(); <-- prints "Test class : tests"
}
}

class Test {
static void tests() {
System.out.println("Test class : tests");
}
}
class Fest extends Test {
void tests3() {
System.out.println("Fest class : tests");
}
}

现在,您的子类中有一个静态方法,您正试图在子类中定义一个具有相同签名的新方法。这是导致问题的原因。如果您在单个类中执行此操作,错误消息会有所不同。

案例一:同类

class Fest{   
void tests3() {
System.out.println("Fest class : tests3");
}
static void tests3() {
System.out.println("Fest class : static tests3"); <-- gives "method tests3() is already defined in class Fest"
}
}

案例 2:子类(静态到实例)

class Test {
static void tests() {
System.out.println("Test class : tests");
}
}
class Fest extends Test {
void tests() { <-- gives "overridden method is static"
System.out.println("Fest class : tests");
}
}

案例二:子类(实例化为静态)

class Test {
oid tests() {
System.out.println("Test class : tests");
}
}
class Fest extends Test {
static void tests() { <-- gives "overriding method is static"
System.out.println("Fest class : tests");
}
}

关于java - 为什么静态方法不能在java中隐藏实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33256005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com