㈠ 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;
}
}
㈡ java有父類對象引用指向子類對象
List 是介面
ArrayList是 List的實現類。
list a =new Arraylist();是父類引用指向子類對象,只能調用父類里有的方法。
Arraylist a =new Arraylist();更靈活。除了能調用父類以有的方法。還能調用ArrayList中獨有的方法。更全面更強大。(但是也有缺點,就是Arraylist 查詢快,如果有一天程序需要修改為刪除快,那麼原來使用 Arraylist 的時候如果使用了Arraylist 自身有的方法那麼修改成linkedList相當麻煩!繁瑣!)
下面請聽我說,List 下有 Arraylist 和 linkedList
父類引用指向子類對象是多態的表現,
就是說一開始就用List 父類引用指向子類對象(Arraylist 和 linkedList)那麼可以限制兩個實現類只能用父類里有的方法,這樣,程序將來無論是更換 Arraylist 也好 或者更換linkedList也罷,都不會影響其他語句。
㈢ java 父類如何在運行期動態獲取子類類名
在父類中設計一個獲取類名的方法
protect String getName(){
return getClass().getSimpleName();
}
到時直接調用就可以獲取子類類名了
㈣ java子類繼承父類 ,父類調用子類的屬性和方法嗎
你理解錯了,那是一切皆對象,是子類方法,確實父類對象,我的理解只能到這個程度
㈤ java父類怎麼訪問子類數據成員
用父類的類型 保存 子類的對象Person p=new Student();用人類的類型p 保存 學生類的對象。此時p對象就可以調用Student類裡面的成員了。這就實現了用父類調用子類的成員。
㈥ java父類調用子類方法
//保存為Shape.java
import java.util.ArrayList;
public abstract class Shape {
public abstract void draw();
public static void main(String[] args) {
ArrayList shapes = new ArrayList();
shapes.add(new Square());
// shapes.add(new Shape()); // ERROR ONE
((Square)shapes.get(0)).draw();
// shapes.get(0).draw(); // ERROR TWO
}
}
//保存為Square.java
public class Square extends Shape {
public void draw () {
System.out.println("The square is being drawn.");
}
}
㈦ java繼承中父類可以訪問子類哪些屬性
父類能訪問子類 public static修飾的屬性;
㈧ java怎麼獲取某個父類(或介面)的所有子類
對啊,你在b類添加對name屬性的註解是不會影響你的父類的,雖然說是這個屬性是父類繼承下來的。而你c類繼承a類,b類什麼操作是c類是不知道的,因為c類只和a類有關系,而和b是沒有關系的,繼承只是擴展不可能會修改父類的。
㈨ Java 子類繼承父類,子類重寫父類方法,這種情況下父類可以獲取到子類的數據嗎
有好幾種可能 主要看new 語句是怎麼寫的了