可以局部覆盖最终方法吗?

时间:2012-12-22 18:36:36

标签: java methods final

public class Test  {  

    public static void main(String args[]){
        Test t = new Test();
        t.inner();

    }
    public final void print() { 
        System.out.print("main"); 
    }      

    public void inner() {       
        class TestInner {           
            void print(){
                System.out.print("sub");                
            }

        }
        TestInner inner =new TestInner();
        inner.print();
        print();
    }
}

Out put:submain

问题:类Test中的方法print()是final是可以访问本地类的,但是本地类是否能够再次定义print()方法?

如果我们在超类中声明私有final x(),那么它在子类中是不可访问的,所以我们可以在子类中定义x()。

如果我们在超类中声明public final x(),它可以在子类中访问,所以我们不能在子类中定义x()。

任何人都可以解释一下吗?

3 个答案:

答案 0 :(得分:6)

内部类不会覆盖final方法。

内部类必须扩展外部类才能从外层重写方法。

这两个类是分开的,彼此无关,除了外层包含内部类。

答案 1 :(得分:2)

因为TestInner类没有扩展Test类,所以它有自己独立的命名空间。

没有技巧,它不会覆盖Test classes打印方法。

答案 2 :(得分:0)

内部类不会覆盖最终方法。

内部类必须扩展外部类才能从外层重写方法。

这两个类是分开的,彼此无关,除了外层包含内部类。