允许使用抽象类类型 isearchboxinfo 的对象_Java学习5-设计模式+抽象类/方法

05c648577695feaa24e94daddb8d87db.png

1.设计模式

设计模式:一套被反复使用、多数人知晓的,经过分类编目的、代码设计经验的总结,是软件开发人员在软件开发过程中面临的一般问题的解决方案。

  1. 项目中合理的运用设计模式可以完美的解决很多问题;
  2. 每种模式在现实中都有相应的原理来与之对应;
  3. 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案。

23种基础模式

单例模式

要点:

  1. 某个类只能有一个实例;
  2. 必须自行创建实例;
  3. 必须自行向整个系统提供这个实例

实现:

  1. 只提供私有的构造方法;
  2. 含有一个该类的静态私有对象;
  3. 提供一个静态的公有方法用于创建、获取静态私有对象。

饿汉式:在创建类的同时实例化对象,以空间(内存中存在周期长)换时间(类加载比较快),线程比较安全

package com.imooc.singletonProj;
/*** 饿汉式:创建对象实例的时候直接初始化*/
public class SingletonOne {//1.私有构造方法private SingletonOne(){}//2.该类型私有静态实例private static SingletonOne instance =new SingletonOne();//3.静态共有方法用于创建、获取静态私有对象public static SingletonOne getInstance(){return instance;}
}

懒汉式:懒汉式:不直接创建静态实例,而是在使用的时候调用静态getter方法完成初始化,用时间换空间,存在线程风险

package com.imooc.singletonProj;
public class SingletonTwo {//1.私有构造方法private SingletonTwo(){}//2.该类型私有静态实例private static SingletonTwo instance=null;//3.创建开放的静态方法提供实例对象public static SingletonTwo getInstance(){if(instance==null)instance=new SingletonTwo();return instance;}
}

单例模式的优点:

  • 在内存中只有一个对象,节省内存空间;
  • 避免频繁创建销毁对象,提高性能;
  • 避免对共享资源的多重占用

单例模式的缺点:

  • 扩展困难;
  • 如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失

使用场景:

  1. 创建对象时占用资源过多,但同时又需要用到这类对象;
  2. 对系统内资源要求统一读写,如读写配置信息;
  3. 当多个实例存在可能引起程序逻辑错误,如号码生成器。

说实话,以上的内容不是太懂,可能学的还是不够深入

2.抽象(类、方法)

2.1 抽象类

如同之前的继承中的例子,父类Animal可以进行实例化,并执行吃的行为

Animal pet=new Animal("花花",2)
pet.eat()

程序运行没有问题,但是实际逻辑上应该是其子类(Cat or Dog)来执行对应的动物各自特殊的 吃的行为,因此使用 abstract 不允许实例化父类来避免写出上述没有意义的代码。防止父类和无意义实例化和子类设计的随意性,父类就是个 工具类(工具人)

抽象类应用场景:某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。

2.2 抽象方法

父类中的方法被子类重写,因此父类的方法没有用,需要用 abstract 修饰方法,称之为 抽象方法,且没有方法体。使其无法调用,并且要求子类重写方法。否则,子类也需要成为抽象类才不用重写。

抽象类和抽象方法的存在是提醒编写者需要重写父类有,但是需要子类的重写的方法。

使用规则:

  1. abstract定义抽象类;
  2. 抽象类不能直接实例化,只能被继
  3. 承,可以通过向上转型完成对象实例化
  4. 包含抽象方法的必须是抽象类,但是抽象类可以没有抽象方法;
  5. static final private 与abstract无法共存;
  6. 可以定义一个抽象类的对象变量,但是只能引用非抽象子类的对象,即向上转型

Person p = new Strudent()

2.3 总结

抽象类禁止了父类被无效的实例化,而抽象方法则要求子类继承后必须重写(除非子类也是abstract),一代一代传下去,谁真正继承,谁重写。

只有抽象方法才需要重写,抽象类中的非抽象方法不需要重写,这是抽象类与接口的不同的其中一点

抽象类将 设计实现 相分开,谁继承,谁再具体实现,这就是抽象类存在的意义。

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

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

相关文章

计算机病毒是以独立的文件形式存在的对吗,计算机病毒以什么形式存在?

自从2113世纪出现第一种病毒以来,对于世界上共有5261种病毒的疾病数量有不同的看法. 无论有1,653种,病毒的数量仍在增加. 根据国外统计,计算机病毒以每周10种的速度增长. 根据我国部的统计,中国计算机病毒以每月4种的速度增长. 有…

签署Java代码

在上一篇文章中,我们讨论了如何保护移动代码 。 提到的措施之一是签名代码。 这篇文章探讨了Java程序如何工作。 数字签名 数字签名的基础是密码学 ,特别是公钥密码学 。 我们使用一组加密密钥:私有密钥和公共密钥。 私钥用于签名文件&am…

蜘蛛搜索引擎_SEO:搜索引擎蜘蛛要引导,不能佛系优化

又是一个不眠的夜晚,工作对生活节奏不断地敲打,我们新一代的年轻小伙不得不进步,满怀热情来挑战我们对于工作的激情,虽然每一天工作都是重复地进行,但是每一天都有我们留下的痕迹,为世界的美好增添一道绚丽…

小程序滴滴车主板块的银行卡管理左滑删除编辑

最近在类似于滴滴软件的一款小程序,工程确实有点大,很多东西都是第一次做。这次记录一下关于左滑删除的一个代码记录。主要的思想就是计算滑动距离的大小来使用css中的 transition 控制滑动的效果,主流的都是控制边距margin来达到左滑的效果。…

华菱重卡仪表指示说明_仪表装置11种常见故障的解决方法

1. 转速表工作不正常或停止工作首先检查转速表背面的黑色3孔插头与插座接触是否良好及电压正常与否。3个端子的连接情况:端子a是电源负极,与仪表盘14孔白色插座上的棕色导线连接后搭铁(仪表盘上所有搭铁点均由棕色导线汇集在一起,并通过胶布包…

ASP .NET SVN emmet 插件

学习 ASP .NET 时间的第三周: 来讲讲如何在 visual studio 2013...上搭载 SVN吧: 废话不多说: One Step: 电脑上已安装 visual studio 2013 等版本(未安装时 红色区域是不存在的) Two Step: 从官网上下载对…

iptables 配置后连接不上数据库_Linux服务器配置-VSFTP服务配置(三)

上文:Linux服务器配置-VSFTP服务配置(二)一、vsftpd服务防火墙配置1、主动(POST)模式 FTP 防火墙配置CentOS6 系统 iptables 的配置iptables -t filter --line-number -nL INPUT#显示现有防火墙规则,查看是否开启20、21号端口。iptables -t filter -I IN…

下标索引必须为正整数类型或逻辑类型_Python3 基本数据类型

Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。Python 3中有六个标准的数据类型&#xf…

noip模拟赛 写代码

分析:这其实就是括号匹配题,一眼贪心题,不过一开始贪错了,以为([)]是合法的......其实括号之间不能嵌套. 一开始的想法是尽量往左边填左括号,因为每种括号的数量都确定了,那么左括号和右括号的数量也就确定…

行内元素和块元素以及行内块元素的特点

一、背景 初学html&#xff0c;接触很多标签 <h1>、<p>、<span>、<ul>、<em>等&#xff0c;当写出简单的小页面的时候&#xff0c;例如仅仅是一篇带有标题的文章&#xff0c;标题 <h1>标签单独一行&#xff0c;不管后面有多大的空间&…

软件测试的功能测试和性能测试,大型软件的功能测试流程及性能测试流程

大型软件具有涉及子模块繁多、建设过程复杂、功能全面、性能具有较高要求的特点。依据ISO/IEC 9126软件产品评估标准&#xff0c;需要对软件的功能性、可靠性、可用性、效率、可维护性、可移植性等方面进行评估。因此&#xff0c;需要有一种方法能够对大型软件进行测试&#xf…

vue 分模块打包 脚手架_Vue面试官最爱的底层源码问题,你可以这样回答!

最近看到身边很多人都在投简历&#xff0c;有因为企业裁员的&#xff0c;有因为自己想跳槽的&#xff0c;原因不一&#xff0c;但是最终大家都会需要接触到面试这个事情。但是很多人对待面试不够认真&#xff0c;只会等待结果&#xff0c;不去努力。所以这边想整理一些懒人面试…

re.containerbase.startinternal 子容器启动失败_Python项目容器化实践(二) Docker Machine和Docker Swarm...

前言这篇文章介绍Docker生态中的常被提到的Engine、Machine和Swarm&#xff0c;大家以了解为主&#xff0c;工作需要再深入。EngineDocker Engine其实就是我们常说的「Docker」&#xff0c;它是一个C/S模型(Client/Server)的应用&#xff0c;包含如下组件:Daemon。守护进程&…

基于设备树的TQ2440的中断(2)

下面以按键中断为例看看基于设备数的中断的用法&#xff1a; 设备树&#xff1a; tq2440_key {compatible "tq2440,key";interrupt-parent <&gpf>;interrupts <0 IRQ_TYPE_EDGE_FALLING>, <1 IRQ_TYPE_EDGE_FALLING>;key_3 <&gpf 2…

计算机里有个不能进入的磁盘分区,新电脑只有一个分区怎么办? 教你们如何不进pe给硬盘创建新分区!...

很多朋友新电脑刚买回来打开发现明明自己机械硬盘1T或者1T机械加128G固态&#xff0c;但是却只有一个或者两个分区&#xff0c;但是又不会分区现在教大家如何不用老毛桃大白菜之类的进pe系统里面就能直接创建新分区1 WinR输入diskmgmt.msc2进入磁盘管理可以查看本机的C盘与E盘的…

OSGi中的权限

在上一篇文章中 &#xff0c;我们介绍了为Java应用程序实现沙箱的方法&#xff0c;在其中我们可以安全地运行移动代码 。 这篇文章探讨了如何在OSGi环境中执行相同的操作。 OSGi OSGi规范 为Java定义了一个动态模块系统 。 因此&#xff0c;它是实施那种可以使您的应用程序动…

HTTP简单教程

目录 HTTP简介 HTTP工作原理 HTTP消息结构 客户端请求消息服务器响应消息实例 HTTP请求方法HTTP响应头信息HTTP状态码 HTTP状态码分类HTTP状态码列表 HTTP content-type对照表 HTTP简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写&…

Reversed-Z详解

在3D渲染管线中&#xff0c;Z这个家伙几乎无处不在&#xff0c;如Z-Buffer&#xff0c;Early-Z&#xff0c;Z-Cull&#xff0c;Z-Test&#xff0c;Z-Write等等&#xff0c;稍有接触图形学的人都会对这些术语有所耳闻。 那么Z到底是什么呢&#xff1f;首先Z当然可以是任意坐标系…

pyqt开发的程序模板_小程序定制开发和模板开发要多少钱?有什么区别?

到现在&#xff0c;小程序开发已经有了1年多的历史&#xff0c;已经达到百万数量级。无论是小程序商城还是小程序游戏&#xff0c;其开发方式不外乎两种&#xff0c;一种是定制开发&#xff0c;另一种是模板开发。对于很多初次接触小程序的客户来说&#xff0c;还不知道小程序的…

html 三列布局(两列自适应,一列固定宽度)

不做过多解释&#xff1a;主要是记录一个完整的布局样式&#xff0c;实现页面大致三列其中左右两列是自适应宽度&#xff0c;中间固定宽度效果。 不多少代码奉上&#xff1a; CSS样式代码&#xff1a; /*********************公共标签样式********************//************…