面向对象三大特征三

76 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第17天,点击查看活动详情

在前面一篇文章中,我们谈到了多态的两种具体表现形式,一种通过方法的重写或重载来体现方法的多态;一种为对象的多态(此处为重难点,需尤其理解加掌握)。

下面进行详细的代码展示:(昨日的例子,在语法上加以修改)

这是我们的主类,大家肯定有留意到我们的animal对象的创建,同以往有些许不同,这里就是我们前面文章所涉及的一个对象的编译类型和运行类型不一致的情况(Animal为animal的编译类型,Dog为其的运行类型,程序执行时,是去执行运行类型里的代码),在当前语句下面,animal这个对象调用的就是Dog这个类里的eat()方法,下面两条语句一样的分析方法。 image.png

此图为Dog类 image.png

此图为cat类 image.png 大家可以在尝试一下其他的例子,比如人为主类,大学生、研究生、博士生等为子类,他们都需要学习知识,将此设为具有共同特性的方法,在每一个类下对其特定细节设置,然后再主类中创建对象时,将其的编译类型设为父类,运行类型设为你想调用的某方法的对应的类。听、看只是记忆,动手实践才是真正意义上的学会了。

细节注意:

  • 多态的前提:两个对象(类)存在继承关系(这里大家可以进行代码简单验证一下);
  • 向上转型:
  1. 本质:父类的引用指向子类,也可以理解为子类的对象一定属于父类;
  2. 语法:父类类型 引用名 = new 子类类型();
  3. 特点:可以调用父类中的所有成员方法(注意权限的限制,可以通过在类中写一些公共的方法进行调用),不能调用子类的特有成员,运行时主要是对子类的方法具体实现。
  • 向下转型:
  1. 语法:子类类型 引用名 = (子类类型) 父类引用;
  2. 只能强制转换父类的引用,不能强转父类的对象; 3.* 可以调用子类中所有的成员。*