java语言中的多态概述
多态:一个对象相应着不同类型
多态在代码中的体现:父类或接口的引用指向其子类对象。
多态的优点:
提高了代码的扩展性,前期定义的代码能够使用后期的内容。
多态的弊端:
前期定义的内容不能使用后期子类中定义的特有内容。
多态的前提:
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语言中的多态概述的更多相关文章
- Java语言中的面向对象特性:封装、继承、多态,面向对象的基本思想(总结得不错)
Java语言中的面向对象特性(总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道jav ...
- Java语言中的面向对象特性总结
Java语言中的面向对象特性 (总结得不错) [课前思考] 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知 ...
- JVM内存管理------JAVA语言的内存管理概述
引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...
- JVM内存管理之JAVA语言的内存管理概述
引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...
- JAVA语言中的修饰符
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
- JAVA语言中冒号的用法
近来由于本人要介入android平台的开发,所以就买了本JAVA语言的书学习.学习一段时间来,我的感觉是谭浩强就是厉害,编写的<C编程语言>系列丛书不愧是经典.书中对C语言的介绍既系统又全 ...
- Java语言中的异常处理
Java语言中的异常处理包括声明异常.抛出异常.捕获异常和处理异常四个环节. throw用于抛出异常. throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异 ...
- C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数
1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...
- 列举java语言中反射的常用方法
package review;/*12:43 2019/7/21*/ import model.AnotherClass; import model.OneClassMore; import mode ...
随机推荐
- mycat 连续分片 -> 自己定义数字范围分片
1,自己定义数字范围分片 自己定义数字范围分片,提前规划好分片字段某个范围属于哪个分片,比方说将第一个500W的数据分片在第一个节点上面.第二个500W的数据分片在第二个节点上,依次类推 2,加入配置 ...
- [GraphQL] Mutations and Input Types
Sometimes, you want to resues object type when doing mutation, you can use 'input' type to help: inp ...
- 一个关于Class的小点
public 是公有 private 是私有 没有写就是private
- 具体图解 Flume介绍、安装配置
写在前面一: 本文总结"Hadoop生态系统"中的当中一员--Apache Flume 写在前面二: 所用软件说明: 一.什么是Apache Flume 官网:Flume is a ...
- openssl之BIO系列之24---SSL类型的BIO
SSL类型的BIO ---依据openssl doc\crypto\bio_f_ssl.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net ,公布于:h ...
- caioj1497&&bzoj3125: CITY
震惊!bzoj居然又被苏大佬D飞了... 这题煞笔模板题好吧. 然而bzojAC caiojWA%40??? 好强啊 今天早上发现是m打成n了囧 #include<cstdio> #inc ...
- mysql授予IP远程访问访问语句
mysql -u root -p; GRANT ALL PRIVILEGES ON *.* TO '用户名'@'你的IP地址' IDENTIFIED BY '密码' WITH GRANT OPTION ...
- linux下服务启动脚本
#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : deployment.py# @Author: Anthony.waa# @Date : 2 ...
- sql server 随机生成布尔值
) AS BIT) 或者 )
- pip快速下载安装python 模块module
g刚开始学习python时,每次想要安装某个module,都到处找module的安装包(exe.whl等) 装setuptools,然后在cmd里用easy_install装pip,然后用pip装你要 ...