Java-多态(上)
什么是多态
同一方法可以根据发送对象的不同而采取多种不同的行为方式
一个对象实际类型是确定的 但指向其引用类型却有很多
注意事项
- 多态是方法的多态 属性没有多态
- 父类和子类 有联系 类型转换异常 ClassCastException
- 存在的条件
- 继承关系
- 方法需要重写
- 父类的引用指向子类对象
场景假设
好比如你的 父亲 有三个儿子 儿子总有一方面长得和爹比较像
大儿子 皮肤比较黑 二儿子 皮肤比较黄 三儿子 皮肤比较白
有一种方法 一种一种判断
if skin == "黄" 是二儿子 if skin == "黑" 是大儿子 if skin == "白" 是三儿子
利用多态 不需要一个个判断 看到皮肤颜色就知道是谁
是因为Java实例方法是基于运行时的实际类型的动态调用 而非变量的声明类型
基类
package com.oop.demo09;
// 父亲类
public class Father {
public void getSkin(){
System.out.println("....");
}
}
大儿子
package com.oop.demo09;
public class First extends Father {
@Override
public void getSkin() {
System.out.println("我是老大 皮肤 比较黑");
}
}
二儿子
package com.oop.demo09;
public class Second extends Father {
@Override
public void getSkin() {
System.out.println("二儿子 皮肤 比较黄");
}
}
三儿子
package com.oop.demo09;
public class Third extends Father {
@Override
public void getSkin() {
System.out.println("三儿子 皮肤比较白");
}
}
测试类
package com.oop;
import com.oop.demo09.Father;
import com.oop.demo09.First;
import com.oop.demo09.Second;
import com.oop.demo09.Third;
public class Applcation {
public static void main(String[] args) {
Father father = new Father();
father.getSkin();
System.out.println("====================");
Father father1 = new First();
father1.getSkin();
System.out.println("====================");
Father father2 = new Second();
father2.getSkin();
System.out.println("====================");
Father father3 = new Third();
father3.getSkin();
/*
* Father father3 = new Third();
* 父类的引用指向子类的实例
*
* Third继承自Father 它拥有Father的非private得属性和方法
* 其他子类也是一样的
*
* 将Father得引用 指向Third得实例 完全ok
* */
}
}
输出
没有每次判断 皮肤颜色 来 打印输出 不用管他是哪个儿子 只需要跟getSkin打交道就好了
利用多态的方式 即 一个类的多种形态 下面继承树
小结
- 多态实现的基础 就是 继承 没有继承没有多态
- Java实例方法是基于运行时的实际类型的动态调用 而非变量的声明类型
- 多态 一个类的多种表现形式 一般用于接口
Java-多态(上)的更多相关文章
- Java 多态——与C++的比较
学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...
- C++和java多态的区别
C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报 转载自:http://www.cnblogs.com/plmnko/archive ...
- 深入理解Java多态机制
从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...
- 从JVM角度看Java多态
首先,明确一下,Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 package test.xing; class Father{ prot ...
- Java经验杂谈(2.对Java多态的理解)
多态是面向对象的重要特性之一,我试着用最简单的方式解释Java多态: 要正确理解多态,我们需要明确如下概念:・定义类型和实际类型・重载和重写・编译和运行 其中实际类型为new关键字后面的类型. 重载发 ...
- 学JAVA第十六 天,JAVA多态
今天老师讲了多态的使用 多态是同一个行为具有多个不同表现形式或形态的能力. 多态的优点: 1. 消除类型之间的耦合关系 2. 可替换性 3. 可扩充性 4. 接口性 5. 灵活性 6. 简化性 我个 ...
- 对java多态的理解
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new C ...
- Java多态面试题案例几解题思路
---恢复内容开始--- Java多态面试题案例几解题思路 这道题是来自别人,先开始看到题很懵,后来有自己的思路: class A { public String show(D obj){ retur ...
- Java多态-如何理解父类引用指向子类对象
java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是“向上转型”. 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new ...
- Java-Runoob-面向对象:Java 多态
ylbtech-Java-Runoob-面向对象:Java 多态 1.返回顶部 1. Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操 ...
随机推荐
- SpringCloud之网关zuul
1.微服务网关介绍和使用场景 1)什么是网关 API Gateway,是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求.鉴权.监控.缓存.限流等功能 统一接入 智 ...
- 刷题-力扣-541. 反转字符串 II
541. 反转字符串 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-string-ii 著作权归领扣网络所有. ...
- 这些经常被忽视的SQL错误用法,你有没有踩过坑?
之前已经讲过mysql的性能优化,感兴趣的朋友可以看看之前的文章,<史上最全的MySQL高性能优化实战总结!>.但是有些问题其实是我们自身的SQL语句有问题导致的.今天就来总结哪些经常被我 ...
- JDK和环境配置,eclipse安装与使用
本博客部分参照https://blog.csdn.net/PGY0000/article/details/79256720 (记住要尊重别人的劳动产品) 原博客给的链接和后面的安装过程有点不一样,不能 ...
- 批量修改Linux密码脚本(Python)
搭建环境 centos 7.4 使用脚本 python 批量修改connect用户的密码 生成密码为随机密码 保存为xls文档 #!/usr/bin/env python # -*- coding: ...
- Tars | 第3篇 Tars中期汇报测试文档(Java语言实现Subset路由规则)
目录 前言 1. 任务介绍 2. 测试模拟方案 2.0 *前置工作 2.1 添加路由规则 2.2 添加存活节点 2.3 [输出]遍历输出当前存活节点 2.4 [核心]对存活节点按subset规则过滤 ...
- Docker容器管理——运行容器命令
1.容器的生命周期(***重要,需要理解) 容器启动后,执行的第一条命令的PID为1 ========================>>>>>>>& ...
- java基础之ThreadLocal
早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序.Thr ...
- autoCAD绘制简单三维立体图形
第一步: 首先绘制一个简单的(封闭的)二维图形: 第二步: 变换观察视角,比如修改为 变换后的视角: 第三步: 选中闭合图形边框,使用组合键"ctrl + shift + E",然 ...
- C# Dapper基本三层架构使用 (三、BLL)
BLL层介绍 业务逻辑层用于做一些有效性验证的工作,以更好的保证程序运行的健壮性.如完成数据添加.修改和查询业务等:不允许指定的文本框中输入空字符串,数据格式是否正确以及数据类型验证:用户权限的合法性 ...