Нет такого понятия как "статический класс".
Есть паттерн "одиночка".
Пример же простой, почему бы не проверить самому?
Код:
PHP код:
package com.company;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Basic> basics = new ArrayList<>();
basics.add(new ChildBasic("I'm child and i'm not alone!"));
basics.add(new ChildBasic("Pew pew, hello, my name is ChildBasic"));
// basics.add(new ForeverAloneBasic()); нельзя так сделать, ибо конструктор приватный
basics.add(ForeverAloneBasic.getInstance());
basics.add(ForeverAloneBasic.getInstance());
basics.add(new ChildBasic("Another child!"));
System.out.println("1st run...");
for (Basic basic : basics) {
basic.doAction();
}
ForeverAloneBasic.getInstance().setMessage("LEAVE ME FFS");
System.out.println("\n2nd run...");
for (Basic basic : basics) {
basic.doAction();
}
}
}
interface Basic {
void doAction();
}
class ChildBasic implements Basic {
private String message;
public ChildBasic(String message) {
this.message = message;
}
@Override
public void doAction() {
System.out.println(this.getClass().getName() + " " + message);
}
}
class ForeverAloneBasic implements Basic {
private String message = "I'm forever alone, leave me.";
private static ForeverAloneBasic instance = new ForeverAloneBasic();
public static ForeverAloneBasic getInstance() {
return instance;
}
private ForeverAloneBasic() {
// запрещаем создание экземпляра
}
public void setMessage(String message) {
this.message = message;
}
@Override
public void doAction() {
System.out.println(this.getClass().getName() + " " + message);
}
}
Вывод:
PHP код:
1st run...
com.company.ChildBasic I'm child and i'm not alone!
com.company.ChildBasic Pew pew, hello, my name is ChildBasic
com.company.ForeverAloneBasic I'm forever alone, leave me.
com.company.ForeverAloneBasic I'm forever alone, leave me.
com.company.ChildBasic Another child!
2nd run...
com.company.ChildBasic I'm child and i'm not alone!
com.company.ChildBasic Pew pew, hello, my name is ChildBasic
com.company.ForeverAloneBasic LEAVE ME FFS
com.company.ForeverAloneBasic LEAVE ME FFS
com.company.ChildBasic Another child!