抽象類的newInstance

2021-09-01 09:55:07 字數 1666 閱讀 6988

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方法定義規範 然後要求子類必須定義具體實現 通過抽象類 我們就可以做到嚴格限制子類的設計 使子類之間更加通用...