java中塑形_Java学习5——接口和多态

1 接口

接口相当于一个完全抽象的,没有任何实现的类

所有的成员函数都是抽象函数

所有的成员变量都是public static final而且一定要赋予初值

接口中的静态函数必须有函数体

接口在声明时也可以声明是泛型接口,其格式是在接口名称后加上

使用关键词interface声明接口

[接口修饰符] interface 接口名称[] [extends 超类名]{

... //方法的原型或静态变量

}

实现接口使用关键字implements

实现接口的语法如下:

public class 类名称 implements 接口名称{

//实现接口的方法

//本类的数据和方法

}

类可以实现很多接口

接口不能继承类,但是接口可以继承接口,派生出新的接口,而且一个接口可以继承多个接口

接口不能实现接口

2 塑型/造型

Java的对象变量是多态的,它们能保存不止一种类型的对象

它们可以保存的是声明类型的对象,或声明类型的子类的对象

当把子类的对象赋给父类的变量的时候,就发生了向上造型

2.1 类型转换

类型转换也称为塑型(type-casting),对象只能被塑性为:

任何一个超类类型

对象所属的类实现的一个接口

自己原来所属的类

塑性主要应用在如下场合:

赋值转换

方法调用转换

算数表达式转换

字符串转换

当一个类对象被塑形为其超类后,它提供的方法就会减少

2.2 造型

用括号围起类型放在值的前面

对象本身并没有发生任何变化,所以不是“类型转化”

运行时有机制来检查这样得转化是否合理, ClassCastException

2.3 向上造型

把一个类型的对象赋给另外一个类型的变量

子类的对象可以赋值给父类的变量

注意:java中不存在对象对对象的赋值

父类的对象不能赋值给子类的对象

2.4 函数调用的绑定

当通过对象调用函数的时候,调用哪个函数这件事情叫做绑定

静态绑定:根据变量的声明类型来决定

在成员函数中调用其他成员函数也是通过this这个对象来调用的

3 多态

3.1 多态的定义

多态指不同类型的对象可以响应相同的消息

通过塑型可以将一个对象当做它的基类对象看待,相同基类派生出的多种类型可被当做同一种类型对待,可对这些不同的类型进行相同的处理,例如toString方法

3.2 绑定

将一个方法调用和一个方法主体连接到一起成为绑定

4 内部类

定义在别的类内部、函数内部的类

内部类能直接访问外部的全部资源,包括任何私有的成员

外部是函数时,只能访问那个函数里final的变量,因为方法中定义的变量是局部的,当方法的声明周期结束时,方法中变量的生存期也结束了,但方法中定义的内部类的实例可能还在被引用。

4.1 常规内部类

OuterClass、InnerClass分别是外部类和内部类,out是OuterClass的引用,则在OuterClass外部实例化InnerClass的代码片段为:

OuterClass out = new OuterClass();

OuterClass.InnerClass in = out.new InnerClass();

OuterClass.InnerClass in = new OuterClass().new InnerClass();

4.2 在方法中的内部类

对方法中定义的内部类实例化,必须在定义的的方法中,而且必须在内部类定义后方可对其实例化。

4.3 匿名内部类

匿名内部类时没有名字的内部类,一般可分为两种:常规定义的内部类;作为方法的参数定义的匿名内部类。常规定义的匿名内部类的声明和使用采用如下格式:

Classname classname = new Classname(){

//类体

}; //注意,必须跟分号

其中,Classname是类或接口名,注意这是一个表达式,它返回一个对象,可以用在需要引用该对象的任何地方。

匿名内部类的方便之处:

该句法定义了一个类,但不需要类的类型;

匿名类实现了一个接口或继承另一个类,而不需要使用implements或extends关键字

4.4 静态内部类

使用了修饰符static的内部类,称为静态内部类。静态内部类与包含类的实例没有实际的联系,因此,不能访问包含类中的非静态成员。实例化静态内部类时,与常规内部类实例化不同。

实例化InnerClass代码片段如下:

OuterClass.InnerClass in = new OuterClass.InnerClass();

一个类OuterClass中有另一个类InnerClass(外部类和内部类), 如果在main函数中使用new 的方式创建内部类的对象,会报错:No enclosing instance of type OuterClass is accessible.

1、原因:

内部类是动态的(无static关键字修饰),而main方法是静态的,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象,所以要在static方法(类加载时已经初始化)调用内部类的必须先创建外部类。

2、解决办法:

创建内部类对象应该:

方法1:外部类对象.内部类对象 (保证外部类对象先于内部类对象出现)

InnerClass in = new OuterClass().InnerClass();

方法2:

如果将内部类修改为静态类,可以在main中直接创建内部类实例。

static class InnerClass{

...

}

当在包含类内部实例化内部类时,可以直接对内部类实例化。如果在包含类的外部实例化内部类,则需要使用包含类的一个引用来实例化。

4.5 匿名类

在new对象的时候就给出类的定义形成了匿名类

匿名类可以继承某类,也可以实现某接口

Swing的消息机制广泛使用匿名类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SecureCRT 8.5.4.1943 CRT中文版

链接: https://www.newasp.net/soft/16364.html 下载网址: http://down-ww3.newasp.net/pcdown/soft/dys/securecrt.pj.rar

【建议珍藏系列】如果你这样回答「什么是线程安全」,面试官都会对你刮目相看!...

戳蓝字“CSDN云计算”关注我们哦!作者 | 陈树义责编 | 阿秃不是线程的安全面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”…

阿里开发者们的第5个感悟:听话,出活

2015年12月20日,云栖社区上线。2018年12月20日,云栖社区3岁。 阿里巴巴常说“晴天修屋顶”。 在我们看来,寒冬中,最值得投资的是学习,是增厚的知识储备。 所以社区特别制作了这个专辑——分享给开发者们20个弥足珍贵的…

bash: vue: command not found

安装Vuecli正常 npm install -g vue/cli查看vue版本,抛出bash: vue: command not found vue --version解决方案1: 在这个目录下面执行命令正常, 那就配置环境变量即可

机器学习与数据科学决策树指南

还在为如何抉择而感到纠结吗?快采用决策树(Decision Tree)算法帮你做出决定吧。决策树是一类非常强大的机器学习模型,具有高度可解释的同时,在许多任务中也有很高的精度。决策树在机器学习模型领域的特殊之处在于其信息…

java迷您_Java

你好,我也是JAVA初学者~加我一下,谢谢QQ:846491----------------解决方案--------------------------------------------------------快加我啊!!!5380&#x…

腾讯安全全面出击:双十一不该成为黑产的狂欢

戳蓝字“CSDN云计算”关注我们哦!作者 | 刘丹出品 | CSDN云计算(ID:CSDNcloud)根据CNCERT/CC国家互联网应急中心资料报告显示:中国遭受DDoS攻击仅次于美国排名第二,在遭受攻击的行业中,电子商务…

Linux环境 Oracle 监听和服务 日常操作

文章目录一、Oracle监听1.1. 查看Oracle监听运行状态1.2. 启动Oracle监听1.3. 关闭监听器二、Oracle 服务2.1. 以SYS用户身份登录Oracle2.2. 切换用户至sys2.3. 启动Oracle实例2.4. 停止Oeacle实例运行一、Oracle监听 操作声明:登录服务器,切换到oracle…

五分钟教你如何用函数计算部署钉钉群发机器人

如果你是钉钉多个群的管理员,想要在多个钉钉群群发消息的时候,是不是还在为要寻找所有的群,并不断的复制黏贴消息而烦恼? 过去的你:(N 个群,N 次操作) 现在的你:(N 个群,1 次操作) …

php原生态三级联动_ajax php实现三级联动的方法

ajax php实现三级联动的方法发布时间:2020-08-19 09:34:43来源:亿速云阅读:106作者:小新小编给大家分享一下ajax php实现三级联动的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧&#xf…

使用Terraform创建托管版Kubernetes

目前,阿里云容器服务已经可以创建托管版 Kubernetes 集群了。相比于默认的 Kubernetes 集群,托管版本会主动替您运维一套高可用的 Master 组件,免去了默认版本集群中三个 Master ECS 节点,从而节约所需的资金成本及维护时的人力成…

确认! Python夺冠,Java“被迫”退出竞争舞台,网友:崩溃!

2019年转眼已经接近尾声,如果盘点下2019年最火的语言,除了Python还能有谁?你心中的王者语言又是谁?这一年Python风光无限这一年JAVA走向右边这一年,我们都很感慨,你呢?关于Python,编…

阿里专家梁笑:2018双十一下单成功率99.9%!供应链服务平台如何迎接大促

本篇文章来自于2018年12月22日举办的《阿里云栖开发者沙龙—Java技术专场》,梁笑专家是该专场第一位演讲的嘉宾,本篇文章是根据梁笑专家在《阿里云栖开发者沙龙—Java技术专场》的演讲视频以及PPT整理而成。 摘要:2018年双十一平稳度过&#…

php inputcsv,php excel格式(csv)数据导入导出(示例)

需要把大量数据导入数据库中,比如考试成绩、电话簿等一般都是存放在excel中的数据,可以考虑把excel导出成csv文件。然后,通过以下程序即可批量导入数据到数据库中,上传csv并导入到数据库中,测试成功。代码:…

首次公开!《阿里计算机视觉技术精选》揭秘前沿落地案例

当下计算机视觉技术无疑是AI浪潮中最火热的议题之一。视觉技术的渗透,既可以对传统商业进行改造使之看到新的商业机会,还可以创造全新的商业需求和市场。无论在电商、安防、娱乐,还是在工业、医疗、自动驾驶领域,计算机视觉技术都…

阿里程序员常用的 15 款开发者工具

戳蓝字“CSDN云计算”关注我们哦!作者 | Linux技术责编 | 阿秃从人工到自动化,从重复到创新,技术演进的历程中,伴随着开发者工具类产品的发展。阿里巴巴将自身在各类业务场景下的技术积淀,通过开源、云上实现或工具等形…

一文深度解读阿里云CDN实时日志的前世今生:挖掘实时数据的无限价值

阿里云CDN实时日志服务可以将CDN采集的日志,秒级的交付给用户, 并且可以对采集到的日志进行实时、交互式分析和报表呈现,为监控、报警、渠道分析、运营分析提供实时、可靠的数据参考,让用户远离锁事,专注数据价值。 12月26日&…

linux php生产环境搭建,linux php 环境搭建

安装所需环境一. gcc 安装安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c二. PCRE pcre-devel 安装PCRE(Perl Compatible Regular Expressions) 是一个Perl库&…