面向对象三大特征:封装性、继承性、多态性之多态性。

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学习:面向对象三大特征:封装性、继承性、多态性之多态性。的更多相关文章

  1. Java中面向对象三大特征

    也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...

  2. java之面向对象三大特征(封装,继承,多态)

    一.封装 封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的对外方法进行内部信息的操作和访问. 封装可以达到以下目的: 1)隐藏类的实现细节 2)让使用者只 ...

  3. 【JavaSE】面向对象三大特征——封装、继承、多态

    前言:本文主要介绍思想 封装 封装这一概念并不仅存在与面向对象中,甚至说封装这一概念不仅限于编程中,其实生活中的封装无处不在.比如 需求:你到银行取钱 参数:你只需要提供银行卡和密码 返回值:柜员会将 ...

  4. Java学习:面向对象三大特征:封装、继承、多态之封装性

    面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...

  5. 封装继承多态-java面向对象三大特征

    第七章  封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...

  6. Java——面向对象的特征二:继承性

    2.1面向对象的特征二:继承性 ①引入类继承最基本的作用是:代码重用. ②语法 [修饰符列表] class 子类名 extends 父类名{ 类体; } ③子类继承父类以后,父类中声明的属性.方法,子 ...

  7. Java的OOP三大特征之一——封装

    面向对象三大特征之一 封装  继承  多态   封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系. ...

  8. OOP面向对象 三大特征 继承封装多态

    OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...

  9. Java_面向对象三大特征

    面向对象特征 面向对象三大特征: 继承, 封装, 多态 继承 继承: 子类可以从父类继承属性和方法 对外公开某些属性和方法 要点(eclipse中Ctrl+T查看继承结构) 1.父类也称超类, 基类, ...

随机推荐

  1. MySQL基础-Linux从入门到精通第十天(非原创)

    文章大纲 一.关于数据库二.MySQL的安装与初始化三.MySQL的基本操作(难点)四.扩展五.学习资料下载六.参考文章   一.关于数据库 mysql的基础知识,可以参考文章:https://www ...

  2. win中Oracle简易客户端和plsql的配置

    连接数据库有2种方式:在本机安装Oracle数据库或者是安装一个oracle简易客户端 当然,简易客户端跟oracle数据库比较少了一些功能 连接方式: 1)简易连接 sqlplus scott/ti ...

  3. MySQL修炼之路二

    1. 表字段的操作 1. 语法: alter table 表名 执行动作: 2. 添加字段(add) alter table 表名 add 字段名 数据类型: alter table 表名 add 字 ...

  4. wpf学习资料链接(做记录)

    1.wpf快速入门系列:https://www.cnblogs.com/zhili/tag/WPF/

  5. Java 中的各种锁

    table th:first-of-type { width: 100px; } 锁的类型 锁的实现 乐观锁 在数据库中可以使用version版本号去实现:在Java中是使用CAS(Compare A ...

  6. NOIP 2006 明明的随机数

    洛谷 P1059 明明的随机数 洛谷传送门 JDOJ 1423: [NOIP2006]明明的随机数 T1 JDOJ传送门 Description 明明想在学校中请一些同学一起做一项问卷调查,为了实验的 ...

  7. 通过ALTER DATABASE postgres SET 解决 plv8 plv8.start_proc 问题

    通过plv8.start_proc 我们可以使用类似钩子的改变 ,方便的扩展plv8,比如基于plv8.start_proc 的require 实现 命令 ALTER DATABASE postgre ...

  8. 【JZOJ5739】【20190706】毒奶

    题目 有\(n\)个现实城市,另有\(n\)个幻想城市 原图中在现实城市存在\(m\)条边,在幻想城市存在\(m-1-n\)条边 一个排列是合法的当且进当显示城市 \(i\) 向幻想城市 \(p_i\ ...

  9. PATA1055 The World's Richest (25 分)

    1055 The World's Richest (25 分) Forbes magazine publishes every year its list of billionaires based ...

  10. spark基础知识二

    主要围绕spark的底层核心抽象RDD进行理解.主要包括以下几个方面 RDD弹性分布式数据集的概念 RDD弹性分布式数据集的五大属性 RDD弹性分布式数据集的算子操作分类 RDD弹性分布式数据集的算子 ...