多态,向上转型,向下转型,final关键字
多态
概述
多态封装性,继承性之后,面向对象的第三大特性。
定义
多态:是指同一种行为,具有多个不同的表现形式。
生活中,比如跑的动作,猫,狗,大象跑起来的动作都是不一样的,再比如飞的动作,昆虫、鸟类、人造飞机,飞起来的动作都是不一样的。可见,同一行为,通过不同的事物,可以表现出不同的形态。多态,描述的就是这样的一种状态。
前提
- 继承或者实现【二选其一】
- 父类的引用指向子类的对象【格式体现】
- 方法的重写【意义:不重写,是无意义的】
多态的表现
多态表现的格式:
父类类型 变量名 = 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关键字的更多相关文章
- Java面向对象之多态(向上、向下转型) 入门实例
一.基础概念 多态: 重点是对象的多态性.某一事物的多种体现形态. 多态的作用: 1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行. 2.不能使用子类特有的功能.只能使用覆盖父类的功能. ...
- “全栈2019”Java第九十章:内部类可以向上或向下转型吗?
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- java上转型和下转型(对象的多态性)
/*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...
- 1.12(java学习笔记)多态及向上、向下转型
一.多态 多态是指同一个方法被调用,由于对象不同导致行为不同. 例如调用自由活动方法,张三喜欢玩耍,那么他就会去玩耍. 李四喜欢学习,那么他可能去学习.调用方法因对象的不同 而产生了不同的行为. 形成 ...
- (转载)java多态(2)-------Java转型(向上或向下转型)
5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念“人”.再例如,麻雀是鸟类的一种(鸟类的子类), ...
- java 向上,向下转型
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...
- 对象的上转型和下转型 (instanceof关键字)
1.对象的上转型,就是多态的一种写法 格式:父类名称 对象名 = new 子类名称(): Animal animal = new Cat(); 含义:右侧创建一个子类对象,把它当作父类来使用 向上转型 ...
- java 向上转型 向下转型
//父类 四边形 class Quadrangle{ public static void draw (Quadrangle q){ } } //子类 public class Parallelog ...
- java基础(十)之向上转型/向下转型
向上转型:将子类的对象赋值给父类的引用. 向下转型:将父类的对象赋值给子类的引用. 向上转型 Student a = new Student(); Person zhang = a; 或者 Perso ...
- java自学第3期——继承、多态、接口、抽象类、final关键字、权限修饰符、内部类
一.继承: 关键字extends /* 定义一个父类:人类 定义父类格式:public class 父类名称{ } 定义子类格式:public class 子类名称 extends 父类名称{ } * ...
随机推荐
- c语言之指针特性
0x01.指针的声明 char x; char* x; short y; short* y; int z; int* z; float f; float* f; double d; double* d ...
- python打印水仙花数的个人总结
面试过程中,提到python,面试最多的就是让你现场写代码实现水仙花.冒泡.九九乘法表,这些面试方法旨在校验面试者的python基础和思维逻辑. 先从水仙花说起,水仙花是指一个n位正整数(n>= ...
- SpringBoot第四集:静态资源与首页定(2020最新最易懂)
SpringBoot第四集:静态资源与首页定(2020最新最易懂) 问题 SpringBoot构建的项目结构如下:没有webapp目录,没有WEB-INF等目录,那么如果开发web项目,项目资源放在那 ...
- python实现有趣的数学逻辑程序
1.无重复数字的三位数 题目:有1.2.3.4个数字, 能组成多少个互不相同且无重复数字的三位数? 都是多少? for i in range(1,5): for j in range(1,5): fo ...
- Stimulsoft Reports和Dashboards发布新版本2020.5具有多项改进
Stimulsoft仪表工具实现所需的数据可视化和自己的信息图表.该产品能够应用必要的过滤器和排序,汇总数据,执行任何复杂度的计算.该产品的优势在于其多功能性-能够为您的业务,财务,销售,行业等任何领 ...
- java 动态增加应用服务器,出现的消息队列的消费者提报错问题
java 动态增加应用服务器,出现的消息队列的消费者提报错问题 在项目中,有这样的业务场景,在某一个时间段,客户流量瞬间增大,服务器瞬间很大,出现高并发问题.有一种解决方案就是脚本动态增加业务服务器, ...
- Maven依赖管理系统
[背景] 之前在领英上读到一篇软文,<Managing Software Dependency at Scale>,讲述了领英是如何处理模块之间的依赖解析,以及如何去更好的处理依赖关系以及 ...
- js 图片放大镜功能
原理:放置两张相同的图片,一张作为主图片(图片1),另一张作为用来裁剪并放大的图片(图片2) 鼠标移动时,计算鼠标在图片1的位置(距离图片1左上角的x,y距离),以此决定在图片2开始 ...
- !!vue-style-loader!css-loader?
摘自:https://blog.csdn.net/qq_27721169/article/details/88666340 问题描述*!!vue-style-loader!css-loader?{&q ...
- 纯CSS实现3D正方体动画效果
前言 纯CSS实现3D正方体动画效果,此方法是通过transform的旋转(rotate)和位移(translate)实现的,具体效果是鼠标滑过时正方体的一个面会产生位移 效果图