无法强制转换为Java

无法强制转换为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

面临无法使用函数更新ArrayList元素的问题。接收错误:

com.wep.Darbuotojas不能强制转换为com.wep.Programuotojas

我想我试着从一个字符串到另一个字符串,或者从一个字符串到另一个字符串进行转换,但是现在看不到在哪里

Darbuotojas类:

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