问答详情
源自:10-3 Java 中的抽象类

这两者有什么区别与联系?

569395cf0001c2fa01710214.jpg

569395cf00014e4c05000410.jpg

Phone phone1=new Nokia;与Nokia nokia=new Nokia;都可以调用call()跟send(),运行结果也一样,那这两者有什么区别与联系?

提问者:Code_More 2016-01-11 19:48

个回答

  • 不忘初心_21
    2016-01-11 20:02:49

    Phone是Nokia和Apple继承的父类(下面只以Nokia说明)。

    Phone phone1=new Nokia这种用法叫做“父类引用指向子类对象”,即声明的是父类,实际指向的是子类的一个对象。由于Nokia是继承自它的父类Phone,所以Phone类型的引用是可以指向Nokia类型的对象的。这就是“向上转型”。

    这种用法的优点是使用者可以更关注父类能做什么,而不去关心子类是具体怎么做的。因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。你可以随时替换一个子类,也就是随时替换一个具体实现,而不用修改其他。

  • root1024
    2016-01-11 19:52:24

    前者是把子类转成父类,称为向上转型,而不能把父类转化为子类