gpt4 book ai didi

java - 我不明白Java继承的一些内容

转载 作者:行者123 更新时间:2023-12-01 17:09:55 25 4
gpt4 key购买 nike

它不起作用,我不知道为什么......我是 Java 世界的新手。

public class Mixed2 {
public static void main(String[] args) {
A c = new C();
c.m1();
c.m2();
c.m3("My text");
}
}
class A {
void m1() {
System.out.print("A's m1, ");
}
}
class B extends A {
void m2() {
System.out.print("B's m2, ");
}
}
class C extends B {
void m3(Object text) {
System.out.print("C's m3, " + text);
}
}
<小时/>
Mixed2.java:5: error: cannot find symbol
c.m2();
^
symbol: method m2()
location: variable c of type A
Mixed2.java:6: error: cannot find symbol
c.m3("My text");
^
symbol: method m3(String)
location: variable c of type A
2 errors

是因为A没有m2和m3方法吗?如果我放入A m2和m3它可以工作,但是B m2和C m3被调用。我不明白。

最佳答案

  1. 您的代码中没有使用多态性。
  2. 您的变量是一个 A 变量,因此该类型不存在 m2 和 m3 方法,并且在没有强制转换的情况下无法使用,这违背了 OOP 的目的。

我将 B 中的方法 m2() 重命名为 m1(),然后你将获得真正的多态性:

class B extends A {

@Override
public void m1() {
// do you want to call the super's method here?
// if so, then call
// super.m1();

System.out.print("B's m1, ");
}
}

c 类的 m3 方法需要一个参数,因此多态性对其不起作用,因为它的签名无法与 m1 的签名匹配。

<小时/>

编辑
您在评论中询问:

sorry is about Inheritance and . i dont know ... is a reference of type A who keep an object of type C ... then c should have idea about the m3?

您的 c 变量是引用 C 对象的 A 类型变量。只有 A 方法可用于该变量,除非您显式地将其转换为其他内容:

((C)c).m3("foo");

这是脆弱且丑陋的代码。如果您想演示多态性,那么您的子类方法应该重写父方法。

关于java - 我不明白Java继承的一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234185/

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