我们可以采用私有方法,最终方法是一样的

时间:2014-04-11 19:03:53

标签: java private final

据我了解,私有方法和最终方法是相同的。 Java编译器在编译时确定私有方法的含义。私有方法和最终方法都不能在运行时修改,也不能被覆盖。这些相似之处使它看起来像私人和最终方法是相同的。这是真的吗?

2 个答案:

答案 0 :(得分:2)

考虑以下示例:

class Super {

    private void foo(){}

    final void bar(){}

}

class Sub extends Super {

    private void foo(){}

    final void bar(){}

}

使用foo()方法没有问题,但在尝试编译bar()方法时会遇到编译问题。这是因为bar()方法无法覆盖,但foo()方法不可见 - 因此不会发生覆盖。

您可以在此处查看更多答案:Overriding private methods in Java

答案 1 :(得分:2)

私有方法自动为final,并从其派生类中隐藏。最终类不会从其派生类中隐藏。因此,您可以创建一个与私有方法同名的新类,例如

class test {
    private void works {
    }
}
class tester extends test {
    private void works {
    }
}

但是你不能创建一个与最终方法同名的新类

/*----------Doesn't Work------------*/
class test {
    final void dWorks {
    }
}
class tester extends test {
    final void dWorks {
    }
}

示例并在此处回答:http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ309_006.htm