java潜在类型机制的具体实现

潜在类型机制

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");
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值