多态:一个对象相应着不同类型

多态在代码中的体现:父类或接口的引用指向其子类对象。

多态的优点:

提高了代码的扩展性,前期定义的代码能够使用后期的内容。

多态的弊端:

前期定义的内容不能使用后期子类中定义的特有内容。

多态的前提:

1,必须有关系,(继承。实现)。

2,要有覆盖。

Animal a =new Cat();

自己主动类型提升,猫对象提升了动物类型。可是特有功能无法訪问。能够限制对特有功能的訪问。

专业讲:向上转型。将子类型隐藏。就不能使用子类的特有方法。

假设还想用详细动物猫的特有功能,能够将该对象进行向下转型。目的是为了使用子类中的特有方法。

Cat c = (Cat)  a;

注意:对于转型,自始至终都是子类对象在做着类型的变化。

if (a instanceof Cat){
Cat c=(Cat) a;
}

instanceof:用于推断对象的详细类型(类或是接口)。仅仅能用于引用数据类型推断。

通常在向下转型前用于健壮性的推断。

多态时,成员的特点:

1。成员变量

编译时:參考引用型变量所述的类中是否有调用的成员变量,有,编译通过,没有编译失败。

执行时:參考引用型变量所述的类中是否有调用的成员变量,并执行该所属类中的成员变量。

简单说:编译和执行都參考等号左边。

2,成员函数(重点)非静态

编译时:參考引用型变量所述的类中是否有调用的成员函数,有,编译通过,没有编译失败。

执行时:參考的是对象所述的类中是否有调用的函数。动态绑定

简单说:编译看左边,执行看右边。

样例:

class Outer
{
void method(){
Object obj =new Object(){
public void show(){
System.out.println("show run");
}
};
obj.show();//错误提示,找不到符号
//由于匿名内部类这个子类对象被向上转型成了Object类型。这样就不能再使用子类的特有方法了
}
}
class InnerClass
{
public static void main(String [] args)
{
new Outer().method();
}
}

3,静态函数

编译时:參考引用型变量所述的类中是否有调用的静态方法,有,编译通过。没有编译失败。

执行时:參考引用型变量所述的类中是否有调用的静态方法。

简单说:编译和执行都看左边。

事实上对于静态方法,是不须要对象的。直接用类名调用就可以。

java语言中的多态概述的更多相关文章

  1. Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)

    Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...

  2. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  3. JVM内存管理------JAVA语言的内存管理概述

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...

  4. JVM内存管理之JAVA语言的内存管理概述

    引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...

  5. JAVA语言中的修饰符

    JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...

  6. JAVA语言中冒号的用法

    近来由于本人要介入android平台的开发,所以就买了本JAVA语言的书学习.学习一段时间来,我的感觉是谭浩强就是厉害,编写的<C编程语言>系列丛书不愧是经典.书中对C语言的介绍既系统又全 ...

  7. Java语言中的异常处理

    Java语言中的异常处理包括声明异常.抛出异常.捕获异常和处理异常四个环节.   throw用于抛出异常.   throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异 ...

  8. C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数

    1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...

  9. 列举java语言中反射的常用方法

    package review;/*12:43 2019/7/21*/ import model.AnotherClass; import model.OneClassMore; import mode ...

随机推荐

  1. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  2. 英语发音规则---P字母

    英语发音规则---P字母 一.总结 一句话总结: 1.P发[p]音? paper ['peɪpə] n. 纸 plane [pleɪn] n. 飞机 pig [pɪg] n. 猪 ship [ʃɪp] ...

  3. [jzoj 5664] [GDOI2018Day1模拟4.6] 凫趋雀跃 解题报告(容斥原理)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/3 description: solution: 考虑容斥原理,枚举不合法的走的步数 ...

  4. js 转化为几天前,几小时前,几分钟前...

    转换标准时间为时间戳: function getDateTimeStamp(dateStr){ return Date.parse(dateStr.replace(/-/gi,"/" ...

  5. Python笔记(六)

    # -*-coding:utf-8-*- # 模块 # 模块是一个Python文件,以.py结尾,能让你有逻辑的组织Python代码 # 可以通过import引入模块 import Course_5 ...

  6. CodeFirst模式,容易引发数据迁移问题(不建议使用)

    code first 模式 .模型类需要数据契约绑定[DataContract] .模型参数需要[DataMember]-----(可以序列化) .(同上)也可以在类的上面增加[Table(" ...

  7. Servlet基础(二)

    1.什么是Servlet   java类,提供web形式的访问   servlet就是按照javaee中servlet规范所编写的java类   能够被浏览器通过URL形式访问到 2.怎么在javae ...

  8. Android实现图片相似度

    Android实现图片相似度 最近公司有一个需求,就是希望能判断用户提交的照片是否是身份证的正面或者反面.可以通过预设一张拍摄清晰的身份证正面或者反面,来对比是否相似,那么问题就转化为如何计算两张图片 ...

  9. SpringMVC视频

    视频内容: 1.下载spring mvc以及spring mvc示例演示http://pan.baidu.com/s/1kTHRfDH 2.配置完善&初步探究控制器拦截http://pan.b ...

  10. 使用RestTemplate上传文件给远程接口

    MultiValueMap request = new LinkedMultiValueMap(1); ByteArrayResource is = new ByteArrayResource(mul ...