Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。
面向对象三大特征:封装性、继承性、多态性之多态性。
extends继承或者implemens实现,是多态性的前提。
例如:
小菜是一个学生,但同时也是一个人。
小菜是一个对象,这个对象既有学生形态,也有人类形态。
一个对象拥有多种形态,这就是:【对象的多态性】
多态的格式与使用
代码当中体现多态性,其实就是一句话:父类引用指向子类对象。
格式:
分类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();
访问成员变量的两方式
1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
Fu obj = new Zi();
System.out.println(obj.num);//Fu
2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。
//子类没有覆盖重写,就是父
//子类如果覆盖重写,就是子
obj.showNum();
在多态的代码中,成员方法的访问规则是
看new的谁,就优先用谁,没有则向上找。
口诀:编译看左边,运行看右边。
对比一下:
- 成员变量:编译看左边,运行还是看左边。
- 成员方法:编译看左边,运行看右边。
Fu obj = new Zi();//多态 obj.method();//父子都有,优先用子
obj.methodFu();//子类没有父类有,向上找父类
多态的好处:
无论右边new的时候换成那个子类对象,等号左边调用方法都不会变化。
向上转型和向下转型:
1.对象的向上转型,其实就是多态的写法:
格式:
父类名称 对象名 = new 子类名称();
Animal animal = new Cat();
(创建了一只猫,当作动物看待,没问题)
含义:
- 右侧创建了一个子类对象,把它当作父类来看待使用。
注意事项:
- 向上转型一定是安全的。从小范围转向的大范围,从小范围的猫,向上转换成为了更大范围的动物。
类似于:
double num = 100://正确,int——>double,自动类型转换
向上转型一定是安全的,没有问题的,正确的。但是有一个弊端,对象一旦向上转型为父类,那么就无法调用子类原有的内容。
解决方法:用对象的向下转型【还原】
2.对象的向下转型,其实是一个[还原]的动作。
格式:
子类名称 对象名 = (子类名称) 父类对象;
Animal animal = new Cat();本来是猫,向上转型为动物
Cat cat = (Cat) animal;//本来是猫,已经被当中动物了,还原回来成为本来的猫
含义:
- 将父类对象,【还原】成为本来的子类对象。
注意事项:
- 必须保证对象本来创建的时候,就是猫,才能向下转型成为猫。
- 如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错。ClassCastException
类似于:
int num = (int) 10.0;//可以
int num = (int) 10.6;//不可以
如何才能知道一个父类引用的对象,本来是什么子类?
格式:
对象 instanceof 类名称
这将会得到一个boolean值结果,也就是判断前面的对象不能当作后面类型的实例。
Animal animal = new Dog();//本来是一只狗
animal.eat();//狗吃骨头
//如果希望调用子类特有的方法,需要向下转型
//判断一下父类引用的animal本来是不是Dog
if(animal instanceof Dog){
Dog dog = (Dog) animal;
dog.watchHouse();
}
//判断一下animal本来是不是Cat
if(animal instanceof Cat ){
Cat cat = (Cat) animal;
cat.catchMouse();
}
Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。的更多相关文章
- Java中面向对象三大特征
也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...
- java之面向对象三大特征(封装,继承,多态)
一.封装 封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的对外方法进行内部信息的操作和访问. 封装可以达到以下目的: 1)隐藏类的实现细节 2)让使用者只 ...
- 【JavaSE】面向对象三大特征——封装、继承、多态
前言:本文主要介绍思想 封装 封装这一概念并不仅存在与面向对象中,甚至说封装这一概念不仅限于编程中,其实生活中的封装无处不在.比如 需求:你到银行取钱 参数:你只需要提供银行卡和密码 返回值:柜员会将 ...
- Java学习:面向对象三大特征:封装、继承、多态之封装性
面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...
- 封装继承多态-java面向对象三大特征
第七章 封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...
- Java——面向对象的特征二:继承性
2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子 ...
- Java的OOP三大特征之一——封装
面向对象三大特征之一 封装 继承 多态 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系. ...
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- Java_面向对象三大特征
面向对象特征 面向对象三大特征: 继承, 封装, 多态 继承 继承: 子类可以从父类继承属性和方法 对外公开某些属性和方法 要点(eclipse中Ctrl+T查看继承结构) 1.父类也称超类, 基类, ...
随机推荐
- canvas与svg整理与区别
1.canvas画布(位图) 2.绘制矢量图 1.不要在style中给canvas设置宽高 会有位移差 2. //获取元素 var c=document.getElementById("c& ...
- day 44
目录 前端 什么是前端 什么是后端 web服务的本质 请求方式 HTTP协议 1.四大特性 2.数据格式 请求格式 响应格式 响应状态码 HTML 文件的后缀名 HTML的注释 HTML的文档结构 标 ...
- ubuntu 16.04 创建NFS
快速设置 安装NFS服务 sudo apt-get install nfs-kernel-server 编辑/etc/exports文件 vim /etc/exports /opt/nfs *(rw, ...
- django2外键,F表达式,Q表达式
一对多 环境 两个类:书的类别和文章,一片文章只能有一个作者,一个作者可以有多个文章,这之间组成了一对多的关系 class Category(models.Model): category = mod ...
- javascript之BOM对象(一window对象)
javascript包含三个部分,ECMAScript,BOM和DOM.ECMAScript是javascript的核心,包含javascript的基础语法.在Web中使用javascript,BOM ...
- centos7 安装 ffmpeg
升级系统 yum install epel-release -yyum update -y 安装Nux Dextop Yum源 由于centos 没有官方软件包,我们可以使用第三方YUM源(Nux D ...
- Ningx的基本使用
Ningx的基本使用 user www; worker_processes 2; error_log logs/error.log info; pid logs/nginx.pid; even ...
- PHP随机获取预设的值
前面我们讲了php怎么获取随机数,<?php echo rand(1000,2000); ?> 一行代码就能搞定,如果要获取ASP,PHP,JAVASCRIPT,AJAX,CSS,JQUE ...
- home_url()用法小结|wordpress函数
home_url()检索可访问当前站点的URL(推荐将<?php bloginfo('url'); ?>用<?php home_url(); ?>来替代),使用适当的协议返回' ...
- IConvertible接口
IConvertible接口:定义特定的方法,这些方法将实现引用或值类型的值转换为具有等效值的公共语言运行库类型. 公共语言运行库类型包括: Boolean.SByte.Byte.Int16.UInt ...