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