㈠ 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 语句是怎么写的了