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

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. Qt选择文件路径

    QString file_path = QFileDialog::getExistingDirectory(this, "请选择文件路径...", "./"); ...

  2. Django extend(继承)模板标签

    在 views.py 上修改 ... def ordered(req): return render(req, "ordered.html") def shopping_car(r ...

  3. Leetcode——2. 两数相加

    难度: 中等 题目 You are given two non-empty linked lists representing two non-negative integers. The digit ...

  4. LOJ 3159: 「NOI2019」弹跳

    题目传送门:LOJ #3159. 题意简述: 二维平面上有 \(n\) 个整点,给定每个整点的坐标 \((x_i,y_i)\). 有 \(m\) 种边,第 \(i\) 种边从 \(p_i\) 号点连向 ...

  5. NGUI里的sprite和label有白色的边框

    问题描述:NGUI里的sprite和label有白色的边框,而原图一切正常 如图: 解决方案: 给Sprite 边缘左右更增加1,这样拉伸的时候就忽略了左右1的位置,图片就不会显示白色边框了

  6. String s = new String("xyz");创建了几个String Object?并作说明。

    String s = new String("xyz");创建了几个String Object?并作说明. 共产生了两个2个对象,第一个是字符串常量xyz,存储于常量池中.第二个对 ...

  7. (转)pgbouncer常用配置项详解

    https://pgbouncer.github.io/config.html 参考 <PostgreSQL修炼之道>之pgbouncer 配置文件分为[databases] 和 [pgb ...

  8. JAVA并发-同步器AQS

    什么是AQS aqs全称为AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLo ...

  9. P1908 逆序对-(树状数组)

    https://www.luogu.org/problem/P1908 比较喜欢线段树,懒得用树状数组(只会套模板,位运算的精髓没有领悟到),一直没有记录树状数组代码,又得捡回来,趁这道题记录一下模板 ...

  10. Centos7安装MySQL(多图)

    文章目录 一.在线安装1.替换网易yum源2.清理缓存3.下载rpm文件4.安装MySQL数据库二.本地安装1.上传MySQL安装包2.安装依赖的程序包3.卸载mariadb程序包4.安装MySQL程 ...