public class Solution { public static class A { protected String nameA = "A"; public A(String nameA) { this.nameA += nameA; } } public class B extends A implements Serializable { private String nameB; public B(String nameA, String nameB) { super(nameA); this.nameA += nameA; this.nameB = nameB; } } public static void main(String[] args) throws IOException, ClassNotFoundException { ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(arrayOutputStream); Solution solution = new Solution(); B b = solution.new B("B2", "C33"); System.out.println("nameA: " + b.nameA + ", nameB: " + b.nameB); oos.writeObject(b); ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray()); ObjectInputStream ois = new ObjectInputStream(arrayInputStream); B b1 = (B) ois.readObject(); System.out.println("nameA: " + b1.nameA + ", nameB: " + b1.nameB); } } Я так понял, что мы пишем "B b = solution.new B("B2", "C33");" из за того, что класс В не статический. Я сделал просто класс В сделал статик и B b = new B("B2", "C33"); и все тоже ОК!!! Если класс не статик то среда ругается что в статическом методе мы хотим создать экземпляр класса не статического. Хотя Solution тоже не статический, но в статическом методе можно создать его экземпляр. Это из за того что Solution не вложенный класс и это его точка входа Маин а класс В вложенный? Или я что то путаю? И объясните пожалуйста про "B b = solution.new B()" вопрос в solution.new!!!!!