java怎么根据接口找到所有的实现类

java怎么根据接口找到所有的实现类,第1张

所谓多态,是把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,但子类实例的本身类型没有改变;如:

A x = new B();

这里虽然是声明了一个 A 类型变量,但 x 的值仍然是指向一个B类型,也就是说xsave()是直接调用 B 类对象的save方法,并没有通过其他方式,它本身就是B类型对象,你可以打印信息 println(xgetClass()) ,它输出的是 B 类而不是 A 类。

在父类中能获取子类的属性吗?一般情况下是不行的,因为孩子尚未出世哪里来的属性。但有时需要在父类处理该类(包含子类)的所有属性,该怎么做呢,有种方法能解决——在父类中将子类的实例引用进来。假设BaseClass是基类,有个getAll方法用以获取该类的所有属性。SubClass继承子BaseClass,SSClass继承自SubClass,SSClass的实例调用getAll方法时获取SSClass及其父类的所有属性。具体做法如下:

import javalangreflectField;

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 = thisbcgetClass();

do {

Field[] fields = clazzgetDeclaredFields();

for (Field f : fields) {

Systemoutprintln(fgetName());

}

clazz = clazzgetSuperclass();

} while (clazz != Objectclass);

}

}

这里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);

scgetAll();

}

输出内容:

ss

c

a

b

bc

以上就是关于java怎么根据接口找到所有的实现类全部的内容,包括:java怎么根据接口找到所有的实现类、Java 子类继承父类,子类重写父类方法,这种情况下父类可以获取到子类的数据吗、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9451052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存