Problemas para gravar/restaurar objetos de uma classe

Oi gente, na segunda classe aqui postada, ao invés de imprimir os tipos dos objetos só imprime null, olha que eu copiei tal e qual está no livro Head Java First. Alguém saberia resolver esse mistério??

package exemplos;

import java.io.*;

public class GameCharacter implements Serializable{
	
	int power;
	String type;
	String [] weapons;
	
	public GameCharacter (int power, String type, String [] weapons){
		power = power;
		type = type;
		weapons = weapons;
	}
	
	public int getPower(){
		return power;
	}
	
	public String getType(){
		return type;
	}
	
	public String getWeapons(){
		String weaponList = "";
		
		for(int i = 0; i < weapons.length; i++){
			weaponList += weapons[i] + "";
		}
		return weaponList;
	}

}
package exemplos;

import java.io.*;

public class GameSaverTest {

	public static void main(String[] args) {
		
		GameCharacter one = new GameCharacter(50, "Elf", new String [] {"bow", "sword", "dust"});
		GameCharacter two = new GameCharacter(200, "Troll", new String [] {"bare hands", "big ax"});
		GameCharacter three = new GameCharacter(120, "Magician", new String [] {"spells", "invisibility"});
		
		//Código que faz coisas com os personagens que podem alterar os valores de seu estado
		
		try{
			ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("GameCharacter.ser"));
			os.writeObject(one);
			os.writeObject(two);
			os.writeObject(three);
			os.close();
		}catch(IOException e){
			e.printStackTrace();
		}
		
		one = null;
		two = null;
		three = null;
		
		try{
			ObjectInputStream is = new ObjectInputStream(new FileInputStream("GameCharacter.ser"));
			GameCharacter oneRestore = (GameCharacter) is.readObject();
			GameCharacter twoRestore = (GameCharacter) is.readObject();
			GameCharacter threeRestore = (GameCharacter) is.readObject();
			
			System.out.println("One's type: " + oneRestore.getType());
			System.out.println("Two's type: " + twoRestore.getType());
			System.out.println("Three's type: " + threeRestore.getType());
		}catch(Exception e){
			e.printStackTrace();
		}

	}

}

Você está errando aqui

public GameCharacter (int power, String type, String [] weapons){  
        power = power;  
        type = type;  
        weapons = weapons;  
    }  

Não está atribuindo nada.
Coloque, antes de cada variável no lado esquerdo da igualdade, this.

        this.power = power;
        this.type = type;
        this.weapons = weapons;

Explico, quando você faz a atribuição sem o this, está apenas trabalhando com o menor escopo, ou, o construtor.
Quando você usa o this.power, está associando à variável do objeto o valor recebido através da variável power que é um dos parâmetros do construtor da classe.

Consegui resolver, o problema tava no método construtor da classe GameCharacter, as mudanças estão abaixo:

public GameCharacter (int p, String t, String [] w){
		power = p;
		type = t;
		weapons = w;
	}

Vixi drsmachado, respondi sem ver que vc já tinha respondido, mas obrigada pela resposta :slight_smile:

Sem problemas, é interessante quando alguém que está com dificuldades vai atrás da resposta e não fica esperando cair do céu.
Parabéns pela resposta.