Java私有构造函数不能阻止继承
下面是一個調用已經私有化的單列的函數的列子. 這里用了靜態內部類,關鍵就是靜態內部類可以訪問外部類的私有構造函數。
這種算是變種繼承吧。前提是可以在原來的單列類里添加代碼。
class Single {
? ?? ???private Single(){
? ?? ?? ?? ?? ? System.out.println("Single");
? ?? ???}
? ?? ???
? ?? ???public void runSingleMethod()
? ?? ???{
? ?? ?? ?? ?? ? System.out.println("runSingleMethod");
? ?? ???}
? ?? ???public static class Evil extends Single
? ?? ???{
? ?? ?? ?? ?? ? public Evil(){
? ?? ?? ?? ?? ?? ?? ?? ?System.out.println("Evil");
? ?? ?? ?? ?? ? }
? ?? ???}
}
public class SingleTest extends Single.Evil
{
? ?? ???public SingleTest()
? ?? ???{
? ?? ?? ?? ?? ? System.out.println("normal");
? ?? ???}
? ?? ???
? ?? ???public static void main(String[] args) {
? ?? ?? ?? ?? ? SingleTest a = new SingleTest();
? ?? ?? ?? ?? ? a.runSingleMethod();
? ?? ???}
}
output:
Single
Evil
normal
runSingleMethod
這個列子表明,要阻止繼承,還是得靠關鍵字 final.
我不知道 可不可以用字節碼增加包 比如ASM 包動態的給Single類增加上面的那段靜態類代碼,但是有一點在這里可以確認就是私有函數不能完全阻止繼承。
總結
以上是生活随笔為你收集整理的Java私有构造函数不能阻止继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 线程手册 第三章 使用线程 Mon
- 下一篇: hadoop loadBalance源码