Illegal modifier for parameter nextId; only final is permitted

0

Witam,
W ramach nauki java napotkałem problem, którego nie rozumiem.
Mam 2 klasy
plik 1


public class Employee {

	private static int nextId =1;
	private String name;
	private double salary;
	public int id;
	
	public Employee (String n, double s)
	{
		name = n;
		salary =s;
		id =0;
	}
	
	public String getName()
	{
	return name;
	}
	public double getSalary()
	{
	return salary;
	}
	public int getId()
	{
	return Id;
	}
	public void setId()
	{
		Id = nextId;
		nextId++;
	}
	public static int getNextId()
	{
		return nextId;
	}
	}
 '''
Plik nr 2
'''
public class StaticTest
extends Employee{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
Employee[] staff = new Employee [3];
staff[0] = new Employee("Tomasz", 40000);
staff[1] = new Employee("Patryk", 20000);
staff[2] = new Employee("Ania", 30000);

for (Employee e: staff)
{
	e.setId();
	System.out.println("name" + e.getName() +".id" +e.getId() +".salary= "+e.getSalary());
}
int n = Employee.getNextId(); //Wywołanie metody statycznej
System.out.println("Następny wolny identyfikator="+n);
	{
		Employee e = new Employee("Grzegorz", 50000);
		System.out.println(e.getName()+" " +e.getSalary());
	}
	}
}
0

To się nie powinno skompilować.
Id =0; jest inicjalizacja zmiennej, ale nie ma jej deklaracji, jest id, ale Java jest case-sensitive.
Pokaż stack trace i popraw post, bo wygląda tragicznie.
Masz 2 metody main, czy już ślepy jestem. Wklej ten kod porządnie.

0

Zmiana salary na double.
Zmiana Id na id.
IntelliJ ładnie podpowiada:

There's no default constructor available in 'Employee'

Robimy taki myk:

public StaticTest(String n, double s) {
        super(n, s);
}

Usuwamy drugą metodę main, a jej zawartość wklejamy do pierwszej.

Wszystko pięknie działa.
Oto jak to powinno wyglądać.

Jak skopiujesz to nogi pourywam. Masz kierować się moimi wskazówkami, jak coś niejasne to podejrzeć i przepisywać.

Klasa Employee

public class Employee {

    private static int nextId =1;
    private String name;
    private double salary;
    private int id;

    public Employee (String n, double s)
    {
        name = n;
        salary = s;
        id = 0;
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }
    public int getId() {
        return id;
    }

    public void setId() {
        id = nextId;
        nextId++;
    }
    public static int getNextId() {
        return nextId;
    }
}

Klasa StaticTest

public class StaticTest extends Employee {

    public StaticTest(String n, double s) {
        super(n, s);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Employee[] staff = new Employee [3];
        staff[0] = new Employee("Tomasz", 40000);
        staff[1] = new Employee("Patryk", 20000);
        staff[2] = new Employee("Ania", 30000);

        for (Employee e: staff)
        {
            e.setId();
            System.out.println("name" + e.getName() +".id" +e.getId() +".salary= "+e.getSalary());
        }
        int n = Employee.getNextId(); //Wywołanie metody statycznej
        System.out.println("Następny wolny identyfikator="+n);

        Employee e = new Employee("Grzegorz", 50000);
        System.out.println(e.getName()+" " +e.getSalary());
    }

}

Powodzenia w dalszym kodowaniu ;)

0

Dzięki,
Możesz powiedzieć co miałeś na myśli z tym "super(n,s)"

public StaticTest(String n, double s) {
        super(n, s);
}
0

Ten fragment kodu to konstruktor klasy StaticTest:

public StaticTest(String n, double s) {
	super(n, s);
}

Słowo kluczowe super odnosi się do klasy, z której dziedziczysz.
Tak naprawdę można się obejść bez dziedziczenia, mógłbyś pozbyć się tego kodu, który zacytowałeś i klauzuli extends Employee w deklaracji klasy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1