无法强制转换为Java
面临无法使用函数更新ArrayList元素的问题。接收错误: com.wep.Darbuotojas不能强制转换为com.wep.Programuotojas 我想我试着从一个字符串到另一个字符串,或者从一个字符串到另一个字符串进行转换,但是现在看不到在哪里 Darbuotojas类:无法强制转换为Java,java,Java,面临无法使用函数更新ArrayList元素的问题。接收错误: com.wep.Darbuotojas不能强制转换为com.wep.Programuotojas 我想我试着从一个字符串到另一个字符串,或者从一个字符串到另一个字符串进行转换,但是现在看不到在哪里 Darbuotojas类: package com.wep; public class Darbuotojas { protected String vardas; protected String pavarde; public S
package com.wep;
public class Darbuotojas {
protected String vardas;
protected String pavarde;
public String getVardas() {
return vardas;
}
public void setVardas(String vardas) {
this.vardas = vardas;
}
public String getPavarde() {
return pavarde;
}
public void setPavarde(String pavarde) {
this.pavarde = pavarde;
}
public int getAmzius() {
return amzius;
}
public void setAmzius(int amzius) {
this.amzius = amzius;
}
protected int amzius;
Darbuotojas() {}
public Darbuotojas(String vardas, String pavarde, int amzius) {
this.vardas = vardas;
this.pavarde = pavarde;
this.amzius = amzius;
}
package com.wep;
public class Programuotojas extends Darbuotojas {
protected String programavimoKalba;
@Override
public String toString() {
return "Programuotojas: " + vardas + " " + pavarde + " " + amzius + " " + programavimoKalba;
}
public void setProgramavimoKalba(String programavimoKalba) {
this.programavimoKalba = programavimoKalba;
}
public Programuotojas(String vardas, String pavarde, int amzius, String programavimoKalba) {
super(vardas, pavarde, amzius);
this.programavimoKalba = programavimoKalba;
}
}
}
程序UOTOJAS类:
package com.wep;
public class Darbuotojas {
protected String vardas;
protected String pavarde;
public String getVardas() {
return vardas;
}
public void setVardas(String vardas) {
this.vardas = vardas;
}
public String getPavarde() {
return pavarde;
}
public void setPavarde(String pavarde) {
this.pavarde = pavarde;
}
public int getAmzius() {
return amzius;
}
public void setAmzius(int amzius) {
this.amzius = amzius;
}
protected int amzius;
Darbuotojas() {}
public Darbuotojas(String vardas, String pavarde, int amzius) {
this.vardas = vardas;
this.pavarde = pavarde;
this.amzius = amzius;
}
package com.wep;
public class Programuotojas extends Darbuotojas {
protected String programavimoKalba;
@Override
public String toString() {
return "Programuotojas: " + vardas + " " + pavarde + " " + amzius + " " + programavimoKalba;
}
public void setProgramavimoKalba(String programavimoKalba) {
this.programavimoKalba = programavimoKalba;
}
public Programuotojas(String vardas, String pavarde, int amzius, String programavimoKalba) {
super(vardas, pavarde, amzius);
this.programavimoKalba = programavimoKalba;
}
}
这是我的函数,我尝试更新所有内容
private ArrayList<Darbuotojas> darbuotojuArray = new ArrayList<Darbuotojas>();
private Darbuotojas darbuotojas = new Darbuotojas();
private void atnaujintiDarbuotoja() {
if (darbuotojuArray.size() == 0) {
System.out.println("Darbuotoju sarasas tuscias. Pridekite nauju darbuotoju");
} else {
for (int i = 0; i < darbuotojuArray.size(); i++) {
System.out.println("ID: " + i + " " + darbuotojuArray.get(i));
}
System.out.println("Pasirinkite kuri darbuotoja norite atnaujinti");
Scanner SI = new Scanner(System.in);
int userSelectsEmployeeID = Integer.parseInt(SI.nextLine());
if (darbuotojuArray.get(userSelectsEmployeeID) instanceof Programuotojas) {
System.out.println("Iveskite varda");
String naujasVardas = SI.nextLine();
System.out.println("Iveskite pavarde");
String naujaPavarde = SI.nextLine();
System.out.println("Iveskite amziu");
int naujasAmzius = Integer.parseInt(SI.nextLine());
System.out.println("Iveskite nauja programavimo kalba");
String naujaKalba = SI.nextLine();
Programuotojas darbProgramuotojas = (Programuotojas) darbuotojas;
darbProgramuotojas.setVardas(naujasVardas);
darbProgramuotojas.setPavarde(naujaPavarde);
darbProgramuotojas.setAmzius(naujasAmzius);
darbProgramuotojas.setProgramavimoKalba(naujaKalba);
}...
private ArrayList darbuotohuarray=new ArrayList();
private Darbuotojas Darbuotojas=新的Darbuotojas();
私有无效atnaujintiDarbuotoja(){
if(darbuotuArray.size()==0){
System.out.println(“Darbuotoju sarasas tuscias.Pridekite nauju Darbuotoju”);
}否则{
对于(int i=0;i
Darbuotojas不能转换为程序uotojas
非常清楚,并且不处理int-to-String
或String-to-int
因为您有Programuotojas扩展了Darbuotojas
,所以您可以在Darbuotojas
对象中保存一个Programuotojas
实例,但不在另一边,想象一下另一个类Foo扩展了Darbuotojas
您不能这样做
Darbuotojas foo = new Foo();
Programuotojas bar = (Programuotojas) foo;
这就是你在这里要做的
Programuotojas darbProgramuotojas = (Programuotojas) darbuotojas;
解决方案: 看起来您使用了错误的元素(在检查了的
实例之后),您想要:
if (darbuotojuArray.get(userSelectsEmployeeID) instanceof Programuotojas) {
//...
Programuotojas darbProgramuotojas = (Programuotojas) darbuotojuArray.get(userSelectsEmployeeID);
}
因为Programuotojas扩展了Darbuotojas
,Darbuotojas不是Programuotojas,因此强制转换是非法的。换句话说,超类不能强制转换为子类Programuotojas darbProgramuotojas=(Programuotojas)darbuotojas;
这一行似乎是问题所在。darbuotojas
是类型为darbuotojas
的对象,您正试图将其转换为Programuotojas