當前位置:首頁 » 編程語言 » java獲取子類

java獲取子類

發布時間: 2022-05-08 21:30:11

1. 為什麼java中Exception的對象能夠獲取子類的信息.

首先要明白異常的拋出與捕獲機制:
當我們沒有在程序中主動使用throw或throws關鍵字拋出一個異常時,異常一般都是有JVM,即java虛擬機拋出的,我們所寫try catch語句塊只是用來捕獲異常的。JVM在拋出這個異常信息之前會對異常做封裝處理,確定異常時什麼類型的異常。比如,此題JVM拋出的就是一個ArithmeticException,然後就查看程序能捕獲什麼類型的異常(就是catch語句塊的參數),如果程序能捕獲的異常類型恰好就是這種異常或者包含這個類型,就把這個異常傳遞給程序處理(本題中就是封裝進了e對象中),以便程序能繼續運行下去。要是程序沒有對這種異常進行捕獲或處理,程序就會報錯,並終止執行。

由於Exception類是所有異常信息的父類,所以當在catch語句的參數適用Exception 時,表示該程序能夠捕獲任何類型的異常,當然也包括了ArithmeticException。其實,ArithmeticException是直接繼承的RuntimeException,而RuntimeException才是直接繼承至Exception,如果把程序中的Exception換成RuntimeException,輸出結果是一模一樣的。
也許說的有點繞,好好體會下。

2. 父類獲取子類類型 java

既然是父類,子類當然可以使用父類中的非私有屬性了。

Base.property

3. Java 子類繼承父類,子類重寫父類方法,這種情況下父類可以獲取到子類的數據嗎

在父類中能獲取子類的屬性嗎?一般情況下是不行的,因為孩子尚未出世哪裡來的屬性。但有時需要在父類處理該類(包含子類)的所有屬性,該怎麼做呢,有種方法能解決——在父類中將子類的實例引用進來。假設BaseClass是基類,有個getAll方法用以獲取該類的所有屬性。SubClass繼承子BaseClass,SSClass繼承自SubClass,SSClass的實例調用getAll方法時獲取SSClass及其父類的所有屬性。具體做法如下:
import java.lang.reflect.Field;
public class BaseClass {
private String a;
private int b;
// public BaseClass() {
// bc = setBC();
// }
private final BaseClass bc = setBC();
private BaseClass setBC() {
return this;
}
public void getAll() {
Class clazz = this.bc.getClass();
do {
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
System.out.println(f.getName());
}
clazz = clazz.getSuperclass();
} while (clazz != Object.class);
}
}
這里BaseClass bc就是子類的引用,構造子類SubClass或SSClass實例時,調用setBC方法將子類的引用獲得。setBC中return this這里的this是子類的實例,不是父類的。setBC也可以在父類構造函數中調用,效果是一樣的,如上面代碼的注釋塊。
子類就不用關心任何事了,不管它是否有自己的構造方法:
public class SubClass extends BaseClass {
@ShareObject
private boolean c;
}
public class SSClass extends SubClass {
private String ss;
public SSClass(int i) {
ss = "";
}
}
測試:
@Test public void get() {
SSClass sc = new SSClass(1);
sc.getAll();
}
輸出內容:
ss
c
a
b
bc

4. java中父類如何得到子類的對象

繼承後子類包含了父類的方法,直接調用就行了,不包括私有成員。
即getChild()不是私有成員,所以直接getChild()就可以
java中父類如何得到子類的對象:
Parent
test3=new
Child();

5. java 反編譯只知道介面 怎麼查子類

class parent{

/**
* 獲取復子類的類名
*/
public String getClassName(){

return this.getClass().getSimpleName();
}

//父類中直接調制用
String className = getClassName();
}
限定!)利用它的單調性求最值與利用均值不等式

6. java怎麼獲取某個父類(或介面)的所有子類

class parent{

/**
* 獲取子類的類名
*/
public String getClassName(){

return this.getClass().getSimpleName();
}

//父類中直接調用
String className = getClassName();
}
限定!)利用它的單調性求最值與利用均值不等式

7. java 父類如何在運行期動態獲取子類類名

給你寫了3個類:

A類:

packagecn.test;
publicclassA{
publicvoidtest(){
System.out.println(this.getClass());
System.out.println(this.getClass().getSimpleName());
System.out.println(this.getClass().getName());
}
}

B類:

packagecn.test;
publicclassBextendsA{

}

Test類:

packagecn.test;
publicclassTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Bb=newB();
b.test();
}
}

結果:

class cn.test.B
B
cn.test.B
你要知道,在繼承關系中,不管父類還是子類,這些類裡面的this都代表了最終new出來時的那個類型的實例對象,所以在父類中你可以中this獲取到子類的信息!

不止一層繼承關系時,你可以根據下面:

A類:

packagecn.test;
publicclassA{
publicvoidtest(){
System.out.println(this.getClass());
System.out.println(this.getClass().getSimpleName());
System.out.println(this.getClass().getName());
System.out.println(this.getClass().getSuperclass());
System.out.println(this.getClass().getSuperclass().getSimpleName());
System.out.println(this.getClass().getSuperclass().getName());
}
}

B類:

packagecn.test;
publicclassBextendsA{
B(){
//System.out.println("B......");
}
}

C類:

packagecn.test;
publicclassCextendsB{
C(){
//System.out.println("C...........");
}
}

Test類:

packagecn.test;
publicclassTest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Cc=newC();
c.test();
}
}

結果:

class cn.test.C
C
cn.test.C
class cn.test.B
B
cn.test.B

8. java如何獲得繼承父類的子類並把它保存在數組中

可以做到。首先數組的定義就是一組相同數據類型的集合,而繼承父類的子類作為一種引用數據類型,他造出的對象也是可以保存在數組當中的。但是基本上沒人會這樣做,但實現我認為是能夠的,你想想,String作為一種引用數據類型,他造出的字元串都可以保存在數組中,子類為什麼不能呢?

9. Java中怎樣獲取一個類的所有子類

1、面向對象思想的繼承是子類繼承父類,父類被其它子類繼承在JAVA虛擬機的容器中並沒有直接介面獲取;

2、如果是在一個項目內獲取父類的子類繼承情況,參考這個代碼:

packagefind;

importjava.io.File;
importjava.io.IOException;
importjava.net.URL;
importjava.util.ArrayList;
importjava.util.List;

importfind.test.Intf;
importfind.test.Man;

publicclassClassUtil{
publicstaticvoidmain(String[]args){
try{
System.out.println("介面實現類:");
for(Class<?>c:getAllAssignedClass(Intf.class)){
System.out.println(c.getName());
}
System.out.println("子類:");
for(Class<?>c:getAllAssignedClass(Man.class)){
System.out.println(c.getName());
}
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}

/**
*獲取同一路徑下所有子類或介面實現類
*
*@paramintf
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getAllAssignedClass(Class<?>cls)throwsIOException,
ClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
for(Class<?>c:getClasses(cls)){
if(cls.isAssignableFrom(c)&&!cls.equals(c)){
classes.add(c);
}
}
returnclasses;
}

/**
*取得當前類路徑下的所有類
*
*@paramcls
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getClasses(Class<?>cls)throwsIOException,
ClassNotFoundException{
Stringpk=cls.getPackage().getName();
Stringpath=pk.replace('.','/');
ClassLoaderclassloader=Thread.currentThread().getContextClassLoader();
URLurl=classloader.getResource(path);
returngetClasses(newFile(url.getFile()),pk);
}

/**
*迭代查找類
*
*@paramdir
*@parampk
*@return
*@throwsClassNotFoundException
*/
privatestaticList<Class<?>>getClasses(Filedir,Stringpk)throwsClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
if(!dir.exists()){
returnclasses;
}
for(Filef:dir.listFiles()){
if(f.isDirectory()){
classes.addAll(getClasses(f,pk+"."+f.getName()));
}
Stringname=f.getName();
if(name.endsWith(".class")){
classes.add(Class.forName(pk+"."+name.substring(0,name.length()-6)));
}
}
returnclasses;
}
}
熱點內容
phpcgi啟動 發布:2024-05-20 22:38:57 瀏覽:578
嵌入式存儲伺服器 發布:2024-05-20 22:14:55 瀏覽:395
sql分組條件 發布:2024-05-20 22:08:49 瀏覽:16
配網web伺服器一個IP地址 發布:2024-05-20 22:07:16 瀏覽:725
電腦板伺服器地址175 發布:2024-05-20 22:03:30 瀏覽:959
編譯靜態函數時 發布:2024-05-20 21:51:20 瀏覽:351
如何在別人的伺服器加模組 發布:2024-05-20 21:28:29 瀏覽:62
伺服器的bios晶元電腦店有嗎 發布:2024-05-20 21:28:26 瀏覽:225
剪輯電影什麼配置 發布:2024-05-20 21:25:17 瀏覽:819
解壓神器中的詭異事件 發布:2024-05-20 21:17:59 瀏覽:8