关于java中向上转型的一小疑问

发布于 2022-09-03 00:05:51 字数 647 浏览 20 评论 0

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,空指向,在第二步阶段完成向上转型操作。但这里,我想问的是为什么经常会先把实例化的对象进行向上转型操作呢?这样做的有什么意义?
求帮忙分析下我的【思路】以及这么做的【意义】,困惑很久了已经::>_<::
先谢谢啦~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

掌心的温暖 2022-09-10 00:05:51

建议可以看下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()。但因为我们提倡面向接口编程,所以养成了一种比较的良好的编程习惯

可能题主的例子不是很好,换个例子

 public class (){
        private Fruit fruit;
        private Test(Fruit fruit){
            this.fruit = fruit;
        }
        
        public void doSomething(){
            fruit.say();
        }
        
        public static void main(String[] args){
            Test test = new Test(new Apple());
            test.say();
            
            Test test = new Test(new Banana());
            test.say();
        }
}

不知道下面这个例子会不会更加直观

冰火雁神 2022-09-10 00:05:51

看你的代码真心头痛,虽然code寥寥无几,但是代码规范太差。

解决你的问题:
向上是非常有意义的。(这个是废话,毕竟设计出来了)
写一个简单的例子,
生产者和消费者,生产者会生产动物,有兔子等各种动物,消费者不知道生产者生产的是什么,所以在消费者那边就统称为动物。

这下你明白了吧

东京女 2022-09-10 00:05:51

可以看看源码,看多了就理解了

じее 2022-09-10 00:05:51

这就是Java三大特性中多态的体现,我们编程中一直提倡面向接口编程。与其说它是一种规范,不如直接说这是一种标准。在写代码时一定要以业务为驱动。检查代码的同时要思考如果业务发生变化的话这样的代码会有什么问题,好不好改等等的情况。
建议看看Java思想和设计模式

和影子一齐双人舞 2022-09-10 00:05:51

看看书或者网上关于多态和接口的描述以及应用,你会发现这样的设计真的很巧妙!

≈。彩虹 2022-09-10 00:05:51

并不是一定说要这么写,这样写只是说如果你用到多态的话,这样写就比较灵活
实际上我大部分开发中还是该怎么写怎么写,你理解是这个意思就行了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文