多态

概述

  多态封装性,继承性之后,面向对象的第三大特性。

定义

  多态:是指同一种行为,具有多个不同的表现形式。

  生活中,比如跑的动作,猫,狗,大象跑起来的动作都是不一样的,再比如飞的动作,昆虫、鸟类、人造飞机,飞起来的动作都是不一样的。可见,同一行为,通过不同的事物,可以表现出不同的形态。多态,描述的就是这样的一种状态。

前提

  1. 继承或者实现【二选其一】
  2. 父类的引用指向子类的对象【格式体现】
  3. 方法的重写【意义:不重写,是无意义的】

多态的表现

 ​ 多态表现的格式:

父类类型  变量名  = new 子类对象;
变量名.方法名();

备注:父类类型指的是子类对象继承的父类类型,或者实现的父接口类型

public class  Fu {
public void method() {
System.out.println("这是父类的method方法");
}
}
// 1. 继承关系
public class Zi extends Fu {
// 2. 方法的重写
@Override
public void method(){
System.out.println("这是子类的method方法被执行。。。");
}
}
// polymorphism 多态
public class TestPolyDemo01 {
public static void main(String[] args) {
// 多态的格式
/*
父类类型 变量名 = new 子类对象;
变量名.方法名();
*/
// 3.父类的引用指向了子类的对象
Fu fu = new Zi();
fu.method();// 本质调用的是子类当中重写之后的method方法
}
}

如果在使用多态方式调用方法时,首先检查父类当中是否有该方法,如果没有,则编译报错,如果有,执行的是子类重写后的方法。

多态的好处

  在实际开发中,父类类型作为方法的形式参数(不同于实际参数),传递子类对象(实参)给方法,进行方法的调用,更能体现 出多态的扩展性和便利性。代码如下

说明:用于多态特性的支持,showAnimalEat方法当中的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,当然可以把cat对象和dog对象传递给方法。

当程序执行过程中。执行eat方法实际执行的是各自子类对象重写之后的eat方法

不仅仅可以做到替代,在扩展性方面,无论之后出现多个子类,都不需要编写showXxxEat方法了,直接使用showAnimalEat()方法了。

所以,多态的好处,体现在可以使程序编写更简单,并且具有良好的扩展性。

访问成员变量有两种方式:

1.直接通过对象名访问成员变量:看等号左边是谁,优先用谁,没有继续往上找

2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则继续往上找

引用数据类型的转型

  多态的转型分为向上转型和向下转型两种:

向上转型

 向上转型:多态本身就是子类类型向父类类型向上转型的过程,这个过程是默认的。

      当一个父类类型引用指向了一个子类对象时,便是向上转型。

​ 使用格式:

父类类型  变量名 = new 子类类型();
比如: Animal animal = new Cat();
向转型

向下转型:父类类型向子类类型转换的过程中,这个过程时强制的。

一个已经向上转型的子类对象,将父类的引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。

使用格式:

子类类型  变量名 = (子类类型) 父类变量名;
比如:Cat cat = (Cat) animal;
转型的异常

  在进行向下转型的过程中,一不小心就出现java.lang.ClassCastException类型转换异常。

&enmsp;为了避免这种类型转换异常的发生,Java提供了instanceof关键字,给引用类型变量做类型的校验。

格式如下:

变量名 instanceof 数据类型
如果变量属于该数据类型,则返回true
如果变量比属于该数据类型,则返回false

所以,我们在转型前,我们最好先进行引用变量的类型判断,代码如下:

final关键字

final关键字代表最终的不可改变的

常见的四种用法:

1.可以用来修饰一个类

2.可以修饰一个方法

3.可以修饰一个局部变量

4.可以修饰一个成员变量

对于成员变量来说,如果使用final关键字修饰,那么这个变量也是不可改变的

1.由于成员变量具有默认值,用final之后系统要求你必须手动赋值,不再有默认值了。

2.对于final的成员变量,要么使用直接赋值,要么通过构造方法赋值,二者之间2选其一

3.必须保证类当中的所有的重载的构造方法,都最终会对final成员变量进行赋值

多态,向上转型,向下转型,final关键字的更多相关文章

  1. Java面向对象之多态(向上、向下转型) 入门实例

    一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. ...

  2. “全栈2019”Java第九十章:内部类可以向上或向下转型吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. java上转型和下转型(对象的多态性)

    /*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...

  4. 1.12(java学习笔记)多态及向上、向下转型

    一.多态 多态是指同一个方法被调用,由于对象不同导致行为不同. 例如调用自由活动方法,张三喜欢玩耍,那么他就会去玩耍. 李四喜欢学习,那么他可能去学习.调用方法因对象的不同 而产生了不同的行为. 形成 ...

  5. (转载)java多态(2)-------Java转型(向上或向下转型)

    5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”.再例如,麻雀是鸟类的一种(鸟类的子类), ...

  6. java 向上,向下转型

    在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...

  7. 对象的上转型和下转型 (instanceof关键字)

    1.对象的上转型,就是多态的一种写法 格式:父类名称 对象名 = new 子类名称(): Animal animal = new Cat(); 含义:右侧创建一个子类对象,把它当作父类来使用 向上转型 ...

  8. java 向上转型 向下转型

    //父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类  public class Parallelog ...

  9. java基础(十)之向上转型/向下转型

    向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...

  10. java自学第3期——继承、多态、接口、抽象类、final关键字、权限修饰符、内部类

    一.继承: 关键字extends /* 定义一个父类:人类 定义父类格式:public class 父类名称{ } 定义子类格式:public class 子类名称 extends 父类名称{ } * ...

随机推荐

  1. ZooKeeper CentOS7上安装

    下载http://www.apache.org/dyn/closer.cgi/zookeeper(我下的是zookeeper-3.4.14) 1.创建 /usr/local/services/zook ...

  2. 三分钟带你分清Mysql 和Oracle之间的误区

    摘要:Mysql 和Oracle,别再傻傻分不清. mysql 和Oracle 在开发中的使用是随处可见的,那就简单去了解一下这俩款火的不行的数据库. 本质区别: Oracle数据库是一个对象关系数据 ...

  3. LTE DTU和4G DTU有什么不同

    其实4G DTU和LTE DTU从本质上来说是没有什么区别的,只是使用的运营商不同,设备的编号会有不同,都是属于DTU设备. LTE是baiLong Term Evolution(长期演进)的缩写.3 ...

  4. win10右键打开PowerShell

    win10右键打开PowerShell 转载自:http://www.xitongzhijia.net/xtjc/20170526/98756.html 如图: 1.首先在桌面新建一个txt文文件 复 ...

  5. [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)

    题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...

  6. http post 四种方式

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...

  7. Android操作系统及APP

    1.   Android操作系统 1.1.  介绍 Android操作系统最初由Andy Rubin开发,主要支持手机.2005年8月由Google收购注资.第一部Android智能手机发布于2008 ...

  8. 2018-12-7 CSAPP及C++

    今天虽然起床迟,但从结果上来看,学习效率还算不赖.从这几天的状况来看,为记录晚上上床后的学习内容,决定把在床上的学习内容算在后一天的学习中.那么从现在开始就可以协商英语的半个小时100个单词了. 英语 ...

  9. TRUNCATE 有约束的表

    在有外键约束的情况下,truncate 表时,会报错, 我们可以设置外键检测为flase,执行完truncate命令后,再启用 SET foreign_key_checks = 0;TRUNCATE ...

  10. linux nf_conntrack 连接跟踪机制 2

    连接跟踪初始化 基础参数的初始化:nf_conntrack_standalone_init 会调用nf_conntrack_init_start 完成连接跟踪基础参数的初始化, hash slab 扩 ...