interface fruit{
public void say();
}
class apple implements fruit{
public void say(){
System.out.println("eat apple");
}
}
public class Just4Fun {
public static void main(String[] args) {
fruit anApple = null ;
//****************************************************
anApple = new apple() ; //向上转型
//****************************************************
anApple.say();
}
}
说下我的思路吧:
以这个例子做说明,实例化apple之后将其赋值给anApple,而anApple类型为fruit,空指向,在第二步阶段完成向上转型操作。但这里,我想问的是为什么经常会先把实例化的对象进行向上转型操作呢?这样做的有什么意义?
求帮忙分析下我的【思路】以及这么做的【意义】,困惑很久了已经::>_<::
先谢谢啦~
建议可以看下Java集合框架
其实按照题主的思路,确实这里不需要
new Apple ()
,然后再把这个实例对象赋值给Fruit
引用,完全可以直接Apple apple = new Apple();apple.say();
但是万一一天需要
new Banana()
(虽然可能性很小,几乎没有这种情况)其实只需要
Fruit fruit = new Apple()
改成Fruit fruit = new Banana()
就OK了,不需要去关心我下面有没有调用Apple自己方法(不是接口Fruit
的方法)面向接口编程的最大的好处就是利用多态的特性,我调用者不需要关系具体的实现是怎么样。当然像题主的例子,其实在这个方法里面完全可以直接用
Apple apple = new Apple()
。但因为我们提倡面向接口编程,所以养成了一种比较的良好的编程习惯可能题主的例子不是很好,换个例子
不知道下面这个例子会不会更加直观