【发布时间】:2023-03-24 14:02:01
【问题描述】:
这是第一堂课
package test;
public class Project {
public void doSomething (String stuff) {
writeStuff();
whichProject(stuff);
}
public void writeStuff(){
System.out.println("This is stuff");
}
public void whichProject(String stuff){
System.out.println("This is a random project " + stuff);
}
}
这是派生类
package test;
public class Project1 extends Project{
public void whichProject(String stuff){
System.out.println("Coding project number one: " + stuff);
}
public static void main(String[] args) {
Project project = new Project1();
project.doSomething("stuff");
}
}
运行 Project1 时,输出结果是:
This is stuff
Coding project number one: stuff
为什么它在 Project1 中调用 whichProject() 而不是 Project 中的那个?毕竟doSomething()不是Project中的一个方法吗?或者当基类中有一个方法位于基类中的另一个方法中时,即使我们在另一个方法中,变量所引用的对象仍然决定将调用哪个方法调用?
现在,如果我们将whichProject() 的修饰符更改为private,那么现在的类就是
package test;
public class Project {
public void doSomething (String stuff) {
writeStuff();
whichProject(stuff);
}
public void writeStuff(){
System.out.println("This is stuff");
}
private void whichProject(String stuff){
System.out.println("This is a random project " + stuff);
}
}
输出变成:
This is stuff
This is a random project stuff
所以现在正在调用 Project 中的 whichProject() 方法,而不是 Project1,即使该变量引用了 Project1 的对象。在这种情况下,我根本不明白发生了什么。对这两种情况的解释(whichProject() 带有 public 修饰符和 whichProject() 带有 private 修饰符)将不胜感激。
【问题讨论】:
标签: java inheritance polymorphism