5.面向对象_多态

多态定义:某一种事物存在的多种形态。

  • 例:动物中猫,狗。
  • 猫这个对象对应的类型是猫类型。
    • 猫 x = new 猫();
  • 同时猫也是动物的一种,也可以把猫称为动物。
    • 动物 y = new 猫();
    • 动物是猫和狗具体事物中抽取出来的父类型。
    • 父类型引用指向子类对象。

1、多态的体现。

    父类的引用指向了自己的子类。

    父类的引用也可以接收自己的子类对象。

2、多态的前提。

    必须是类与类之间有关系,要么继承,要么实现。

    通常还有一个前提:存在覆盖。

3、多态的好处。

    多态的出现大大的提高程序的扩展性。

4、多态的弊端。

    提高了扩展性,但是只能使用父类的引用访问父类中的成员。

5、多态的应用。

Animial a = new cat();//类型提升,向上转型。

//如果想要调用猫的特有方法时,该怎样调用?强制将父类的引用,转成子类类型(向下转型)。cat c = (cat)a;//注意:不能将父类对象转成子类类型。能转换的是父类引用指向了子类对象时,该引用可以被提升,也可以被强制转换。多态自始至终都是子类对象在做着变化。

6、多态的出现代码中的特点(多态使用的注意事项)

多态中成员函数的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,否则编译失败。

在运行时期:参阅对象所属的类中是否有调用的方法。

简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。

在多态中成员变量的特点:

无论编译和运行,都参考左边(引用型变量所属的类)。

在多态中,静态成员函数和变量的特点:

无论编译和运行,都参考左边。

7、instanceof

通常在两种情况下调用,1、子类是有限的。2、在进行其他比较的时候,要确定它到底是哪一种类型,再调用它特有的方法去比较,这个时候就需要用instanceof判断一下。

if(!obj instanceof Demo)  return false//直接抛出异常更为合适。

8、Object类

Object:是所有对象的直接或者间接父类。传说中的上帝。该类中定义肯定是所有对象都具备的功能。

如果自定义类中与父类中有相同的功能,就没有必要重新定义,只要沿袭父类中的功能,建立自己特有的内容即可,这就是覆盖。

equals(Object obj);  : (指示其他某个对象是否与此对象“相等”)Java认为所有的对象都具备比较性,都能比较两个对象是否相同。

toString();   :(返回该对象的字符串表示)Java认为所有对象都能变成字符串被打印。

hashCode(); :(返回该对象的哈希码值)。

getClass();   :(返回该Object类的运行时类)

黑马程序员_Java面向对象3_多态的更多相关文章

  1. 黑马程序员_Java面向对象2_继承

    4.面向对象_继承 4.1继承的概述 提高了代码的复用性. 让类与类之间产生了关系,有了这个关系,才有多态的特性. 注意:千万不要为了获取其他类的功能而去继承,简化代码而继承.必须是类与类之间有所属关 ...

  2. 黑马程序员_Java面向对象1_封装

    3.面向对象_封装 3.1面向对象概念 3.1.1理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程:强调的是功能行为(执行者) 面向对象:将功能封装进对象,强调具备了 ...

  3. 黑马程序员_Java面向对象_异常

    6.异常 1.异常: 就是程序在运行时出现不正常的情况.问题也是现实生活中一个具体的事物,也可以通过Java的类进行描述,并封装成对象.Exception和Error的子类名都是以父类名作为后缀名. ...

  4. 黑马程序员_Java面向对象_包

    7.包 7.1包(package) 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称是:包名.类名. 包也是一种封装形式. 利用命令行自动生成文件夹格式:D:\jav ...

  5. 黑马程序员_Java面向对象_内部类

    6.面向对象_内部类 1.内部类定义 内部类:将一个类定义在另一个类里面,对里面那个类就称为内部类.(内置类.嵌套类)内部类可以被私有修饰. 2.内部类访问规则 访问特点: 内部类可以直接访问外部类中 ...

  6. 黑马程序员_Java基础视频-深入浅出精华版--PPT 文件列表

    \day01\code\第一章_Java概述.ppt;\day01\resource\资料\50道编程题(有精力的同学看看).doc;\day01\resource\资料\Sun_Java程序员认证考 ...

  7. 黑马程序员_Java基础视频-深入浅出精华版--视频列表

    \day01\avi\01.01_计算机基础(计算机概述).avi; \day01\avi\01.02_计算机基础(计算机硬件和软件概述).avi; \day01\avi\01.03_计算机基础(软件 ...

  8. 课程2:《黑马程序员_Java基础视频-深入浅出精华版》-视频列表-

    \day01\avi\01.01_计算机基础(计算机概述).avi; \day01\avi\01.02_计算机基础(计算机硬件和软件概述).avi; \day01\avi\01.03_计算机基础(软件 ...

  9. 黑马程序员_Java基础:网络编程总结

    ------- android培训.java培训.期待与您交流! ---------- Java语言是在网络环境下诞生的,它是第一个完全融入网络的语言,虽然不能说它是对支持网络编程做得最好的语言,但是 ...

随机推荐

  1. 提升效率的Linux终端快捷操作汇总

    很多普通 Linux 桌面用户都对使用终端感到排斥和恐惧,其实它没大家想的那么复杂,很多常见操作都可以直接在终端中进行,如:安装软件.升级系统等. 无论你是新手还是 Linux 终端使用的老鸟,系统极 ...

  2. split

    import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; /** * 解析知网文章的页面 ...

  3. Java 泛型数组

    Java 不支持泛型数组.也就是说, List<String>[] ls = new ArrayList<String>[10]; 是不支持的,而 List<String ...

  4. 使用awrextr.sql导出awr原始数据

    1.AWR原始数据与AWR报告的差别 AWR原始数据: 是oracle数据库mmon进程定期将统计量从内存转储至磁盘,并以结构化的形式存入若干张表组成自己主动工作负荷存储仓库(AutomaticWor ...

  5. [ES6] Objects create-shorthand && Destructuring

    Creating Object: Example 1: let name = "Brook"; let totalReplies = 249; let avatar = " ...

  6. 读取xml文件信息

    static void Main(string[] args) { XmlTextReader reader = new XmlTextReader(@"D:\zy\visual studi ...

  7. OD: Universal Shellcode

    本节讲如果开发通用的 Shellcode. Shellcode 的组织 shellcode 的组织对成功地 exploit 很重要. 送入缓冲区的数据包括: . 填充物.一般用 0x90 (NOP) ...

  8. linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /e ...

  9. jquery1.9学习笔记 之层级选择器(一)

    子选择器(“parent > child”) 描述:选择所有父元素的直系子元素. 例子: <!doctype html> <html lang='zh'> <hea ...

  10. php 函数strtr 替换函数实例解析 strtr 速度比较快

    先来看看这个php字符串替换函数 PHP字符串替换函数strtr()的两种状态 strtr(string,from,to) 或者strtr(string,array) 首先针对PHP字符串替换函数st ...