Единственный хороший способ, который я могу придумать, это на самом деле не расширение, а обертка:
class Player {
private final static Charachter me = new Character();
public static doSomething(){ me.doSomething(); }
}
Конечно, вы также можете расширять И обтекание:
class Player extends Character {
private final static Player me = new Player();
// if you don't want anyone creating player objects
// make the constructor private:
private Player(){ super(); }
public void doSomething(){
// stuff
}
public static void staticDoSomething(){ me.doSomething(); }
}
Или, собственно, поскольку ваша цель состоит в том, чтобы просто гарантировать наличие одного объекта игрока, вы можете забыть о том, чтобы сделать методы статичными, но скрыть конструктор (ы):
class Player extends Character {
private static Player thePlayer = null;
public static Player getPlayer(){
if( thePlayer == null ){
// Create the player
thePlayer = new Player();
}
// There is a valid player object, so return it.
return thePlayer;
}
// hide the constructor(s) by making them private:
private Player(){ super(); }
}
Это гарантирует, что единственный способ получитьPlayer
должен вызывать Player.getPlayer()
, и он всегда дает вам один и тот же объект (вы никогда не создаете больше одного).