/*定义一个类BaseBean,它是抽象的,里面各种方法。
我们要做的是找个类继承它(因为它是抽象类),然后获得实现它的这个类指向父类的实例(对象 )(多态),这个是终极目标。*/
abstract class BaseBean{
//略
}
//好了,就像上面说的,接下来,我们找个类实现它,实现它的这个类叫做ChildBean类
class ChildBean extends BaseBean{
}
//好了,到了这里我们,得到了ChildBean类,我们用BaseBean b = new ChildBean();就完成了终极目标。
//虽然以上方法可以用,但是我们可以用接口,来实现相同的功能。下面我们再来实现一次终极目标。
//当然,首先定义一个接口叫IA,接口里有一个方法,该方法,返回的类型是BaseBean,它可以通过多态帮助我们实现终极目标。
Interface IA{
public BaseBean doSomething();
}
//为什么,它可以呢?下面我用一段代码表示一下。
class ChildBean extends BaseBean{
}
class TextDemo implements IA{
public BaseBean doSomething(){
return new ChildBean();
//有安全隐患
}
}
//到这里大家可以比较这两种实现方式
//第一种通过一个类继承它,再获得其指向父类的对象。
//第二种是让一个类本身具备方法来获得它。
/*
看到这里大家是不是会感觉用接口的方式有些,画蛇添足的感觉。为什么?
因为你们肯定想到,虽然第二种把实现终极目标把过程封装成方法有一定的优越性
但是我可以直接不实现接口,就像这样做
class TextDemo /*implements IA*/{
public BaseBean doSomething(){
return new ChildBean();
} //也有安全隐患
}
这样不是比较方便吗?我又何必实现一个接口(虽然接口可以多实现),而且两种通过接口的方法都有安全隐患。
它们的安全隐患在于:如果父类BaseBean有多个子类。除了ChildBean还有ChildBean1 , ChildBean2等等等等
那么我们的方法了返回值虽然是父类类型可我们return 的子类可有多种。
那么我们需要的是那个子类?我们无法限制。所以new 后面的各种子类都不会编译报错!
所以强转的时候就会出现问题比如
ChildBean c = (ChildBean)b;
我们不知道b是ChildBean1类型。所以运行时就报错说ChildBean1 无法转成ChildBean类型。
So泛型接口诞生了,它怎么解决这个安全问题呢?
*/
//那么接下来我们就用泛型接口吧:
//回忆上面说过的我们不用接口,直接用方法的理由是因为用接口在这里多此一举。
//那么我们如果通过接口给方法附加限制条件的话,用接口就可以理解了。
//而在这里,给方法限制的条件同过泛型。
//此时实现了的终极目标具有方法的优越性,和安全性!
Interface IA<T extends BaseBean>{
public T doSomething();
}
class IAImpl implements IA<ChildBean>{
public ChildBean doSomething(){
return new ChildBean();
}
}
//呵呵,买个萌先
//就我目前,我现在还没有真正进入泛型接口的学习(这篇博文写后就学习去),以上是感性的简单的理解,说不对的欢迎拍砖。
三end
java_haha....学习去了.
望共同进步!