“全栈2019”Java第五十六章:多态与字段详解

156 阅读3分钟
原文链接: www.toutiao.com

难度

初级

学习时间

10分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.字段

字段就是与对象或类关联的变量。

“全栈2019”Java第五十六章:多态与字段详解

2.多态

如果我们只写这样一个简单的方法,它只接收一个父类作为参数,而不是以子类作为接收参数,这样的话只要传递父类及其子类都可以,这个过程我们就称之为多态。

演示:

多态的应用。

代码:

Animal类:

“全栈2019”Java第五十六章:多态与字段详解

Cat类:

“全栈2019”Java第五十六章:多态与字段详解

Dog类:

“全栈2019”Java第五十六章:多态与字段详解

Main类:

“全栈2019”Java第五十六章:多态与字段详解

结果:

“全栈2019”Java第五十六章:多态与字段详解

多态的应用有很多,这里就不再多展示。

3.多态与字段

为什么要说说多态与字段呢?

字段访问操作都将由编译器解析,因此不是多态的。

演示:

请在父类中定义一个实例变量和一个类变量,给实例变量和类变量提供get方法。子类也有一份和父类一摸一样的实例变量和类变量,并且也提供get方法,涉及到重写方法的请加注解。另外,请在子类中额外提供一个获取父类实例变量和类变量的方法。

注:父类和子类中所有实例变量和类变量访问修饰符都是public的。

代码:

Animal类:

“全栈2019”Java第五十六章:多态与字段详解

Cat类:

“全栈2019”Java第五十六章:多态与字段详解

Main类:

“全栈2019”Java第五十六章:多态与字段详解

结果:

“全栈2019”Java第五十六章:多态与字段详解

animal.name在编译时期就已经指定了,就是父类Animal的实例变量值。

animal.getName()这个属于方法的动态绑定,主要是发生在运行时期,所以实际调用的是子类Cat里面的实例方法。

animal.ID是类变量,直接与类关联,所以直接是父类Animal中的类变量值。

animal.getID是类方法,直接与类关联,所以直接调用父类Animal中类方法。

解释完运行结果之后,我们再来看看下面程序的答案是什么:

代码:

其他类不变。

修改Main类:

“全栈2019”Java第五十六章:多态与字段详解

结果:

“全栈2019”Java第五十六章:多态与字段详解

因为自身类中指向自身对象,所以也就不存在多态。无论是调用字段还是方法都是从子类Cat中执行。

总结

  • 字段访问操作都将由编译器解析,因此不是多态的。
  • 静态方法和变量是与类,而并非与单个的对象相关联的。

至此,Java中多态与字段相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第五十五章:方法的静态绑定与动态绑定

下一章

“全栈2019”Java第五十七章:多态与构造方法详解

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java第五十六章:多态与字段详解

版权声明

原创不易,未经允许不得转载!