潜在类型机制
Java编程思想的解释是:潜在类型机制是一种代码组织和复用机制,当用某个实例调用方法时,它只要求实现该实例实现了这些方法子集,而不用继承或实现某个接口,换句话说,程序不关心你什么类型,只要你的类型带有这些方法就行了,这样满足你可以横跨类继承结构,而调用不属于某个公共接口的方法。
个人的理解:程序在使用方法的时候并不用关心对象具体的类型,只要能够顺利的调用方法即可。再简单点理解,跟java的多态思想有些类似。
普通形式实现:
public class ClassTest1 {
public static void main(String[] args) {
new Action().act(new Bird());
new Action().act(new Plane());
}
}
interface Flyer {
void fly();
void stopFly();
}
class Bird implements Flyer {
@Override
public void fly() {
System.out.println("bird fly");
}
@Override
public void stopFly() {
System.out.println("bird stop fly");
}
}
class Plane implements Flyer {
@Override
public void fly() {
System.out.println("plane fly");
}
@Override
public void stopFly() {
System.out.println("plane stop fly");
}
}
class Action {
public static <T extends Flyer> void act(T actor){
actor.fly();
actor.stopFly();
}
}
反射形式实现:
public class ClassTest1 {
public static void main(String[] args) {
new Action().act(new Bird());
new Action().act(new Plane());
}
}
interface Flyer {
void fly();
void stopFly();
}
class Bird implements Flyer {
@Override
public void fly() {
System.out.println("bird fly");
}
@Override
public void stopFly() {
System.out.println("bird stop fly");
}
}
class Plane implements Flyer {
@Override
public void fly() {
System.out.println("plane fly");
}
@Override
public void stopFly() {
System.out.println("plane stop fly");
}
}
class Action {
public static void act(Object actor){
Class<? extends Object> class1 = actor.getClass();
try {
Method method = class1.getMethod("fly");
method.invoke(actor);
} catch (Exception e) {
System.out.println(actor + "can't fly");
}
try {
Method method = class1.getMethod("stopFly");
method.invoke(actor);
} catch (Exception e) {
System.out.println(actor + "can't stop fly");
}
}
}