java覆盖不工作

标签 java

我是 Java 的初学者,我使用过 PHP、C++ 和 Lua,从来没有遇到过这个问题,为了练习,我制作了两个类 FactoMyFacto,第一个确实找到阶乘,第二个应该不是通过加法而是通过乘法找到阶乘。不要因为愚蠢和毫无意义的代码而责备我,我只是在测试并试图掌握 Java 的窍门。

主要内容:

public class HelloWorld {
public static void main(String[] args) {

    Facto fc = new Facto(5);
    fc.calc();
    System.out.println(fc.get());   

    MyFacto mfc = new MyFacto(5);
    mfc.calc();
    System.out.println(mfc.get());

}
}

事实.java:

public class Facto {
private int i;
private int res;

public Facto(int i) {
    this.i = i;
}

public void set(int i) {
    this.i = i;
}

public int get() {
    return this.res;
}

public void calc() {
    this.res = this.run(this.i);
}

private int run(int x) {
    int temp = 0;
    if(x>0) {
        temp = x + this.run(x-1);
    }
    return temp;
}
}

MyFacto.java:

public class MyFacto extends Facto {
public MyFacto(int i) {
    super(i);
}

private int run(int x) {
    int temp = 0;
    if(x>0) {
        temp = x * this.run(x-1);
    }
    return temp;
}
}

我认为结果应该是 15 和 120,但我得到的是 15 和 15。为什么会这样?它是否与 calc() 方法没有被覆盖有关,它使用 Facto 类中的 run() 方法?我该如何解决这个问题,或者覆盖此类问题的正确方法是什么?

最佳答案

您遇到问题的原因是 member access visibility .

简而言之:

  • public允许任何 Java 类查看字段/函数,只要它可以到达。
  • <package> ,或没有明显的修饰符,允许任何 Java 对象(但不是子类)看到字段/函数,只要它们在同一目录或包中。
  • protected允许声明的类和所有其他子类访问该字段/函数,以及同一目录/包中的任何类。
  • private允许声明的类访问该字段/函数。

关于java覆盖不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217915/

相关文章:

java - Go、Java 和 C# 中数组的最大长度是多少?

java - JavaFX 中的象限散点图?

java - 从txt文件读取时的错误处理

java - 屏障同步(输出、增量和等待)

java - 删除字符串的一部分之后的所有内容

java - 如何通过httpUnit在input中输入文本

java - 在 Google App Engine 1.7.3 中运行修改后的 Drools 5.5.0

java - 在 WINDOWS 的 Unix 终端上编译 Java 程序

java - 非servlet类的实例变量是线程安全的吗?

java - 是否可以在 Java 中创建泛型的二维锯齿状数组?