Java 如何让子类覆盖类的内部类?

Java 如何让子类覆盖类的内部类?,java,Java,这个程序现在打印出来(“i anm inner1”)。 如何使程序打印(“I anm inner2”)?调用子级内部类的print() package tt; class Out { class Inner { void print() { System.out.println("i anm inner1"); } } public void run() { Inner in = new Inne

这个程序现在打印出来(“i anm inner1”)。
如何使程序打印(“I anm inner2”)?

调用子级内部类的
print()

package tt;

class Out {
    class Inner {
        void print() {
            System.out.println("i anm inner1");
        }
    }

    public void run() {
        Inner in = new Inner();
        in.print();
    }

}

class Out2 extends Out{
    class Inner{
        void print() {
            System.out.println("i anm inner2");
        }
    }
}

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Out2().run(); // 打印 i anm inner2
    }
}
或者,覆盖
run()
内部
Out2

new Out2().new Inner().print(); 

调用子级内部类的
print()

package tt;

class Out {
    class Inner {
        void print() {
            System.out.println("i anm inner1");
        }
    }

    public void run() {
        Inner in = new Inner();
        in.print();
    }

}

class Out2 extends Out{
    class Inner{
        void print() {
            System.out.println("i anm inner2");
        }
    }
}

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Out2().run(); // 打印 i anm inner2
    }
}
或者,覆盖
run()
内部
Out2

new Out2().new Inner().print(); 

调用子级内部类的
print()

package tt;

class Out {
    class Inner {
        void print() {
            System.out.println("i anm inner1");
        }
    }

    public void run() {
        Inner in = new Inner();
        in.print();
    }

}

class Out2 extends Out{
    class Inner{
        void print() {
            System.out.println("i anm inner2");
        }
    }
}

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Out2().run(); // 打印 i anm inner2
    }
}
或者,覆盖
run()
内部
Out2

new Out2().new Inner().print(); 

调用子级内部类的
print()

package tt;

class Out {
    class Inner {
        void print() {
            System.out.println("i anm inner1");
        }
    }

    public void run() {
        Inner in = new Inner();
        in.print();
    }

}

class Out2 extends Out{
    class Inner{
        void print() {
            System.out.println("i anm inner2");
        }
    }
}

public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Out2().run(); // 打印 i anm inner2
    }
}
或者,覆盖
run()
内部
Out2

new Out2().new Inner().print(); 

您可以覆盖(重写)基类中的工厂方法,而不是覆盖内部类,您必须扩展Out2.inner

    @Override
    public void run() {
        Inner in = new Inner();
        in.print();
    }

您可以覆盖(重写)基类中的工厂方法,而不是覆盖内部类,您必须扩展Out2.inner

    @Override
    public void run() {
        Inner in = new Inner();
        in.print();
    }

您可以覆盖(重写)基类中的工厂方法,而不是覆盖内部类,您必须扩展Out2.inner

    @Override
    public void run() {
        Inner in = new Inner();
        in.print();
    }

您可以覆盖(重写)基类中的工厂方法,而不是覆盖内部类,您必须扩展Out2.inner

    @Override
    public void run() {
        Inner in = new Inner();
        in.print();
    }


您应该在
out2
中覆盖
run()
您应该在
out2
中覆盖
run()
您应该在
out2
中覆盖
run()
您应该在
out2
中覆盖
run()
重复的!但是我想做的是覆盖父类的子类。如何实现它?@user3327884你是指基类的内部类吗?是的,我是按照上面所示的方法实现的。还是谢谢你,非常感谢!但是我想做的是覆盖父类的子类。如何实现它?@user3327884你是指基类的内部类吗?是的,我是按照上面所示的方法实现的。还是谢谢你,非常感谢!但是我想做的是覆盖父类的子类。如何实现它?@user3327884你是指基类的内部类吗?是的,我是按照上面所示的方法实现的。还是谢谢你,非常感谢!但是我想做的是覆盖父类的子类。如何实现它?@user3327884你是指基类的内部类吗?是的,我是按照上面所示的方法实现的。还是谢谢你。是的,重写也可以工作。但是我想重用run()编码部分,因为它太长了。是的,重写也可以工作。但是我想重用run()编码部分,因为它太长了。是的,重写也可以工作。但是我想重用run()编码部分,因为它太长了。是的,重写也可以工作。但是我想重用run()编码部分,因为它太长了。