Java多态的学习差不多有3个小时,老师还夹杂着一些编译器运用的知识。

这是多态的基本知识:



我们可以创建父类引用指向子类对象,这就是多态的一种。(这种也叫向下转型)

Pet c=new Cat();//Pet是父类,Cat是子类
c.eat();

这样的话,如果Pet中有一个eat()的方法就会编译通过,否则会编译报错,因为该引用是Pet类型的。(静态绑定,编译阶段的绑定)

编译成功后会运行,需要Cat中有一个eat()类,否则会运行报错,因为该引用指向的对象是Cat。(动态绑定,运行阶段的绑定)

如果再加一行代码:

Dog d=(Dog)c;//把c强制转换成Dog类型

就会发生运行阶段的报错java.lang.ClassCastException(类型转换异常,总在向下转型时发生),因为JVM堆内存中c指向的对象是Cat,Cat对象不能转换成Dog对象,两种之间没有任何继承关系,所以会报错。

为了避免这种情况,我们可以使用instanceof运算符。

用法是

引用 instanceof 数据类型名

返回值是bool类型。

实践在最后。

这是多态的作用



以前c++学多态的时候,就学的一个virtual,听得挺迷糊的,看了什么静态、动态绑定也不知道是什么意思,只会用。学了Java中的多态后,两相印证,现在清楚多了。

写代码用多态拓展起来确实会方便很多。

最后我实践了一下

package duotai;

public class Main {
public static void main(String[] args){
Valoran kk=new Valoran();
Demacia gai=new Demacia();
Knox nuo=new Knox();
kk.shuo(gai);
kk.shuo(nuo);
if(gai instanceof Demacia)
{
System.out.println("盖伦是德玛西亚人");
}
else
{
System.out.println("盖伦出错啦");
}
if(nuo instanceof Knox)
{
System.out.println("诺手是诺克萨斯人");
}
else
{
System.out.println("诺手出错啦");
}
}
}

这是写的几个类,就不具体放上来了。



运行结果:

Java学习(十七)的更多相关文章

  1. Java学习十七

    学习内容: 1.Java字符串类 1.在utf-8编码下,每个汉字占三个字节 2.字符串和byte数组之间的相互转换 将字符串转换为byte数组 byte[] arrs = str.getBytes( ...

  2. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  3. 2016最新Java学习计划

    一.Java学习路线图 二.Java学习路线图--视频篇 六大阶段 学完后目标 知识点 配套免费资源(视频+笔 记+源码+模板) 密码        第一阶段 Java基础 入门 学习周期: 35天 ...

  4. “全栈2019”Java第九十七章:在方法中访问局部内部类成员详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第二十七章:流程控制语句中循环语句for

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. “全栈2019”Java第十七章:赋值运算符和算术运算符

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  8. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  9. 分享篇——我的Java学习路线

    虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...

  10. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

随机推荐

  1. P4643-[国家集训队]阿狸和桃子的游戏【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P4643 题目大意 给出\(n\)个点\(m\)条边的无向图,两个人轮流选择一个未被选择的点加入点集. 然后每个人的 ...

  2. Go变量与基础数据类型

    一.基础介绍 Go 是静态(编译型)语言,是区别于解释型语言的弱类型语言(静态:类型固定,强类型:不同类型不允许直接运算) 例如 python 就是动态强类型语言 1.Go 的特性: 跨平台的编译型语 ...

  3. Hutool-Convert类型转换常见使用

    Convert 主要针对于java中常见的类型转化 java常见类型的转化 转化为字符串 public class HConvert { public static void main(String[ ...

  4. NLP与深度学习(六)BERT模型的使用

    1. 预训练的BERT模型 从头开始训练一个BERT模型是一个成本非常高的工作,所以现在一般是直接去下载已经预训练好的BERT模型.结合迁移学习,实现所要完成的NLP任务.谷歌在github上已经开放 ...

  5. 基础篇——Pycharm的安装与使用 初学者此篇够用

    简介 Pycharm是python编程过程中最为推荐的编辑调试软件之一,其使用简单,界面友好,也成了学习Python路上必须学会的软件之一,本篇教程简单介绍一下windows用户从安装到日常使用的基本 ...

  6. 5分钟让你掌握Vuex,深入浅出

    5分钟让你掌握Vuex,深入浅出 一.什么是Vuex? 概念:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预 ...

  7. 成功在Caterpillar代码中插入事件对象-20200917

    首先搞清楚了Caterpillar的solidity代码生成机制.Caterpillar分为Caterpillar Core和 executepanel两部分. executePanel是UI前端,用 ...

  8. HCNP Routing&Switching之BGP防环机制和路由聚合

    前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...

  9. maven编码 gbk 的不可映射字符

    解决这个问题的思路: 在maven的编译插件中声明正确的字符集编码编码--编译使用的字符集编码与代码文件使用的字符集编码一致!! 安装系统之后,一般中文系统默认字符集是GBK.我们安装的软件一般都继承 ...

  10. 一套比较好用的公众号UI框架-weui

    最近工作原因 需要在pd端弄一套js类似bootstrap框架 由于使用环境是在公众号终端用的比较多! 类似上面这样的样式 所以我从微信官方开始找起 最后找到了WEUI 还别说 真的挺好用的 这是大佬 ...