gpt4 book ai didi

java - 重写 Java 中的规则

转载 作者:搜寻专家 更新时间:2023-11-01 02:15:26 25 4
gpt4 key购买 nike

这里有两个例子:

public class A {
public void foo(A a) {
System.out.println("in A");
}
}


public class B extends A {
public void foo(B b) { // (1)
System.out.println("in B");
}
public void f(Object o) { // (2)
System.out.println("in B");
}
}

我不明白为什么 (1) 和 (2) 被认为是 A 的 foo() 的重写方法。方法编号 1 接受比原始 foo() 更低的类,我的意思是我不能向她发送任何 A 类。如我所见,(1) 不扩展 foo (),但它仍然算作覆盖 - 为什么?(与 (2) 类似的论点,但相反)。

我认为它被覆盖的原因是:

当我想跑的时候

  B b = new B();

b.foo(b);

它检查 A 是否有接受 Bfoo。因为每个 B 都是一个 A,它确实有一个,所以它应该打印“in A”而不是“in B”,因为 B 不会覆盖它。但它打印“在 B”..

最佳答案

它们都没有覆盖父类(super class) A'a 方法。

class A {
public void foo(A a) {
System.out.println("in A");
}
}


class B extends A {

@Override
public void foo(B b) {
System.out.println("in B");
}
@Override
public void foo(Object o) {
System.out.println("in B");
}
}

当我编译上面的代码时出现错误:

$ javac -g O.java 
O.java:10: method does not override or implement a method from a supertype
@Override
^
O.java:14: method does not override or implement a method from a supertype
@Override
^
2 errors

但请注意,可以从覆盖方法返回一个子类。以下编译没有错误。

class A {
public A foo() {
System.out.println("in A");
return this;
}
}

class B extends A {
@Override
public B foo() {
System.out.println("in B");
return this;
}
}

关于java - 重写 Java 中的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373877/

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