此代码的目的,
一: 通过类修饰符,将基类实现类对外隐藏,以实现完全解耦. 且更安全
二: 通过反射机制, 仍然可以访问到该实现类的独有的和重写等的方法.
三: 如果该类是向上转型,通过反射机制,获取的是实现类
- 基类
package sky.java.reflact.protectedclass;
public class Parent {
public void a() {
System.out.println("a....");
}
public void b() {
System.out.println("b....");
}
public static Parent createC() {
return new C();
}
}
- 实现类
package sky.java.reflact.protectedclass;
class C extends Parent{
@Override
public void b() {
super.b();
}
public void c() {
System.out.println("c....");
}
}
- 调用类
package sky.java.reflact;
import sky.java.reflact.protectedclass.Parent;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class UseClass {
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
// 将其实现类通过修饰符修饰C类,以达到对外隐藏防耦合.
Parent parent = Parent.createC();
parent.a();
// 但是可以通过反射进行调用
UseClass.reflact(parent,"b");
UseClass.reflact(parent,"c");
}
public static void reflact(Object obj, String method) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class o = obj.getClass();
Method m = o.getDeclaredMethod(method);
m.setAccessible(true);
m.invoke(obj);
}
}