[英]Java cannot find symbol when calling a method from another class
我试图从我的演示类调用 klub 类中的方法 show,并在演示类(从我的 klub 类中)调用方法 visAlleAtleter,但我收到一个错误,说它找不到符号,然后方法的名称。 我试图指定我想要它的来源,但我不确定如何去做。 这是我的俱乐部课程
import java.util.ArrayList;
public class Klub {
private String navn;
private ArrayList<Atlet> atleter;
public Klub(String navn) {
this.navn = navn;
atleter = new ArrayList<>();
}
public void addAtlet(Atlet atlet) {
atleter.add(atlet);
}
public void visAlleAtleter() {
System.out.println(navn);
for(Atlet atlet: atleter) {
atlet.display();
}
}
public void visAlleAtleter2(boolean samletValue) {
if(samletValue = true) {
Atlet.show();
} else {
}
}
}
这是我的演示课
public class Demo {
public static void main(String[] args) {
Klub minKlub = new Klub("SWU United");
Atlet atlet1 = new Atlet("Pan", "Tennis", 43.5, 21);
Atlet atlet2 = new Atlet("Peter", "Golf", 41.5, 29);
Atlet atlet3 = new Atlet("Robby", "Tennis", 43.5, 20);
Atlet atlet4 = new Atlet("Niklas Klein", "Maisball", 21.2, 23);
Atlet atlet5 = new Atlet("Linni Maister", "Maisball", 44.1, 32);
Atlet atlet6 = new Atlet("Dennis Michael", "Maisball", 32.5, 11);
minKlub.addAtlet(atlet1);
minKlub.addAtlet(atlet2);
minKlub.addAtlet(atlet3);
minKlub.addAtlet(atlet4);
minKlub.addAtlet(atlet5);
minKlub.addAtlet(atlet6);
Klub.visAlleAtleter();
}
}
和我的 atlet 课
public class Atlet {
private String navn;
private String sportsgren;
private double pris;
private int alder;
public Atlet(String navn, String sportsgren, double pris, int alder) {
this.navn = navn;
this.sportsgren = sportsgren;
this.pris = pris;
this.alder = alder;
}
public void oppdaterPris(double nyPris) {
pris = nyPris;
}
public double getPris() {
return pris;
}
public double predSalgspris() {
return pris-0.95*Math.abs(25-alder);
}
public void display() {
System.out.println(navn + " (" + alder + ") - " +
sportsgren + ": " + pris + "kr (" + predSalgspris() + "kr)");
}
}
方法visAlleAtleter
不是静态的,所以你不能像Klub.visAlleAtleter()
那样调用它。 只需在对象minKlub.visAlleAtleter()
上调用方法。
问题在于Klub.visAlleAtleter();
在Demo
的main
方法中。 要纠正此问题,您必须将其替换为minKlub.visAlleAtleter();
.
这样做的原因是,根据您的代码,您有一个名为minKlub
Klub
类的实例。 方法visAlleAtleter()
绑定到类Klub
任何实例,而不是类Klub
本身。
编辑:为了说明为什么您的尝试可能是一个问题,请考虑以下示例:
public class Demo {
public static void main(String[] args) {
Klub minKlub = new Klub("SWU United");
Klub dinKlub = new Klub("SEU United")
Atlet atlet1 = new Atlet("Pan", "Tennis", 43.5, 21);
Atlet atlet2 = new Atlet("Peter", "Golf", 41.5, 29);
minKlub.addAtlet(atlet1);
minKlub.addAtlet(atlet2);
Atlet atlet3 = new Atlet("Mads", "Fotball", 123, 123);
Atlet atlet4 = new Atlet("Mikkelsen", "Curling", 123, 123);
dinKlub.addAtlet(atlet3);
dinKlub.addAtlet(atlet4);
Klub.visAlleAtleter();
}
}
在这个例子中,当调用Klub.visAlleAtleter()
,不可能知道 Java 应该调用minKlubb
还是dinKlubb
上的方法。 将minKlub
和dinKlub
视为Klub
类的物理实例很重要。
巧的是,写Klub.someArbitraryMethod()
其实是java中常用的一个特性,其中someArbitraryMethod()
是静态声明的。 仅当您将该方法声明为static
才可能采用这种编写方式:
public static void someArbitraryMethod() {...}
这意味着该方法不属于类Klub
任何物理实例,而是属于类Klub
本身。 正在做
minKlubb.someArbitraryMethod();
因此会导致编译错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.