多态,向上转型,向下转型,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 父类名称{ } * ...
随机推荐
- 【转】Hello SDL: Your First Graphics Window
FROM: http://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php Hello SDL: Your First Graphics Window ...
- css-设置背景透明度
实现透明的css方法通常有以下3种方式,以下是不透明度都为80%的写法: css3的opacity:x,x 的取值从 0 到 1,如opacity: 0.8 兼容性:IE6.7.8不支持,IE9及以上 ...
- redis方法-
//链接错误注意 //1.防火墙 //2.配置文件IP绑定 $redis = new Redis(); //连接redis $redis->connect('127.0.0.1', 6379); ...
- Verilog小总结
Verilog小总结 基础 assign assign作为一个组合逻辑常用的语句,可认为是将电线连接起来,当然它能做的不仅仅是将一个输入直接输出,它能把输入信号进行逻辑运算后再输出.当assign左右 ...
- xshell断线解决办法
困扰了好几个月了,网上更改ssh配置文件.固定ip都不好使,终于找到xshell掉线的解决办法了 哈哈!!! 设备管理器-->网络适配器-->对应网络连接虚拟机方式,本机虚拟机桥接如图 右 ...
- C#实现的几种委托方式介绍
//普通委托 DeleteShow ds = new DeleteShow(ShowName); Console.WriteLine("----- ...
- 分布式文档存储数据库之MongoDB分片集群
前文我们聊到了mongodb的副本集以及配置副本集,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13953598.html:今天我们来聊下mongodb的分片 ...
- ado.net 连接数据库
一.用SqlConnection连接SQL Server 1..加入命名空间 using System.Data.SqlClient; 2.连接数据库 SqlConnection myConnecti ...
- socket套接字(字节序、地址转换)
什么是socket: socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上 不同主机之间的进程通信.IPv4套接口地址结构 struc ...
- Linux操作系统选择
主流的操作系统 ubuntu centos debian oracle linux 主要使用的操作系统就是上面几个,主要是ubuntu和centos,debian是基于ubuntu改的,oracle ...