1:看直譯器模式,看到下面的**
document doc = null;
//建立乙個解析器工廠
documentbuilde***ctory factory = documentbuilde***ctory.newinstance();
//獲得乙個documentbuilder物件,這個物件代表了具體的dom解析器
documentbuilder builder=factory.newdocumentbuilder();
//得到乙個表示xml文件的document物件
doc=builder.parse(filepathname);
//去掉xml文件中作為格式化內容的空白而對映在dom樹中的不必要的text node物件
doc.normalize();
documentbuilde***ctory為抽象類,抽象類一般是不會去例項化的。
這裡的documentbuilde***ctory.newinstance()是使用了抽象類的static方法去返回乙個例項,
可以看原始碼
public static documentbuilde***ctory newinstance() catch (factoryfinder.configurationerror e)
}
這裡返回的是factoryfinder.find,find方法去查詢本地的例項類,我們可以通過**去看下
public class test
}
輸出結果為
com.sun.org.apache.xerces.internal.jaxp.documentbuilde***ctoryimpl@15eb0a9
com.sun.org.apache.xerces.internal.jaxp.documentbuilderimpl@1a05308
[#document: null]
而documentbuilde***ctoryimpl則是
public class documentbuilde***ctoryimpl extends documentbuilde***ctory{}
documentbuilderimpl則是
public class documentbuilderimpl extends documentbuilder implements jaxpconstants{}
都是例項化的子類。
2:其實抽象類的newinstance方法一般都定義為static的,使用靜態方法返回其子類例項的類。這樣做一般就是表明它的子類不應該再擴充套件其他新的方法了,只需要實現這個抽象類宣告的方法就夠了。比如內部類
public abstract class abstract
public abstract void method(string s);
protected static class abstractimpl extends abstract }
public static void main(string args)
}
執行結果為
com.lxw.test.abstract$abstractimpl@757aef
抽象類的newinstance演示
抽象類 抽象方法
抽象類 1.類名前有abstruct修飾。有構造方法。在建立抽象類的子類的時候,還是會先建立抽象父類的物件的。2.抽象類不能例項化是指不能手動的new。抽象方法 1.抽象方法 沒有方法體且需要用abstruct關鍵字修飾 作用 需要改變的地方都應該是抽象。抽象方法只能存在於抽象類或介面中。2.有抽象...
抽象類,抽象方法
1 抽象類中可以有實現的方法。抽象方法必須在抽象類中。using system using system.collections.generic using system.linq using system.text namespace test 抽象類可以包含抽象屬性 public int age...
抽象類 抽象方法
抽象方法 使用 abstract修飾的方法,只有方法的宣告 沒有方法體 定義的是一種 規範 就是告訴子類必須要給抽象方法提供具體的實現 抽象類 包含抽象方法的類就是抽象類 通過abstract方法定義規範 然後要求子類必須定義具體實現 通過抽象類 我們就可以做到嚴格限制子類的設計 使子類之間更加通用...