高校网站推广方案seo培训优化

news/2025/9/29 7:14:19/文章来源:
高校网站推广方案,seo培训优化,网站备案信息的核查方式,php 文档系统wordpress提前讲的重要知识点 一个类在没有父类的情况下默认有一个父类为Object类。 而当在有父类情况下#xff0c;如果你那父类没有父类#xff0c;则其父类的父类默认为object类#xff0c;所以即使一个类有父类#xff0c;其内部还是有object类。 object类都是隐藏起来的如果你那父类没有父类则其父类的父类默认为object类所以即使一个类有父类其内部还是有object类。 object类都是隐藏起来的你不会看到但是能用。 多态 前言 当父类引用所引用的子类对象不一样时。调用重写的方法所表现出来的行为是不一样的我们把这种思想叫做多态。  其中上面所说的可能大家会觉得有点抽象所以且听我慢慢道来大家就懂了。 多态的基础是动态绑定所以要了解多态前提我们还要了解动态绑定。 了解动态绑定的前提  要想实现动态绑定我们需要满足以上几个条件 1.要发生向上转型 2.有发生重写子类和父类有同名的方法 3.使用父类对象的引用去调用重写方法 完成了这三部分就会发生动态绑定。 从而用该父类对象的引用调用子类和父类都有的方法时调用的是子类方法而不是正常来说的父类方法。 而在这里出现了重写以及向上转型这些概念。所以我们得先了解它们才能再去了解动态绑定。 向上转型 向上转型实际就是创建一个子类对象将其当成父类对象来使用。  语法格式父类类型 对象名 new 子类类型() ​ Animal animal new Cat(元宝,2); ​//cat是子类animal是父类 虽然它们类型不相同但由于它们是继承关系子类类型可以隐式转换为父类类型小范围能隐式转换为大范围所以能实现该代码。  向上转型有以上三种方式 1. 直接赋值 2. 方法传参 3. 方法返回 public class TestAnimal {// 2. 方法传参形参为父类型引用可以接收任意子类的对象public static void eatFood(Animal a){a.eat();}// 3. 作返回值返回任意子类对象public static Animal buyAnimal(String var){if(狗.equals(var) ){return new Dog(狗狗,1);}else if(猫 .equals(var)){return new Cat(猫猫, 1);}else{return null;}}public static void main(String[] args) {Animal cat new Cat(元宝,2);   // 1. 直接赋值子类对象赋值给父类对象Dog dog new Dog(小七, 1);eatFood(cat);eatFood(dog);Animal animal buyAnimal(狗);animal.eat();animal buyAnimal(猫);animal.eat();} } 向上转型的优点让代码实现更简单灵活。 向上转型的缺陷不能调用到子类特有的方法。 虽然我们创造的对象是子类对象但引用是父类的引用所以用发生向上转型的父类引用其不能调用子类的特有方法如果是子类和父类都有名字相同的方法此时用该引用调用相同的方法调用的是子类的方法 重写 重写(override)也称为覆盖  重写是对重写的父类方法是有限制的等会来讲父类方法的实现过程进行重新编写放在子类中。  【方法重写的规则】 1.子类在重写父类的方法时一般必须与父类方法原型一致 返回值类型 方法名 (参数列表) 要完全一致 2.当然有个特殊点被重写的方法返回值类型可以不同但是必须是具有父子关系的这里的父子关系指的是在父类中返回值必须要为父类类型在子类中方法必须为子类类型相反则会报错。 3.访问权限不能比父类中被重写的方法的访问权限更低。例如如果父类方法被public修饰则子类中重写该方法就不能声明为 protected。 注意在重写的方法里不能出现private这个访问权限修饰符  访问权限大小比较privatedefaultprotectedpublic 4.父类中被static或private或final修饰的方法以及构造方法都不能被重写。  5.在子类中重写的方法, 可以使用 Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心 将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法 构成重写  注意重写只能应用于成员方法不能应用于成员变量。  动态绑定和静态绑定 静态绑定也称为前期绑定(早绑定)即在编译时根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。 动态绑定也称为后期绑定(晚绑定)即在编译时不能确定方法的行为需要等到程序运行时才能够确定具体调用哪个类的方法。 所以说正是因为动态绑定我们才能实现多态。 在实现重写和向上转型这两个前提后用该父类对象的引用调用子类和父类都存在且同名的方法时就发生了动态绑定使运行时期确认调用的是子类同名方法而不是正常情况下应该调用的父类同名方法。 从而利用这个动态绑定作为基础去实现多态。 多态的实现 多态具体点就是去完成某个行为时当不同的对象去完成时会产生出不同的状态。代码如下 此时在上述代码中不同对象用同一个方法时产生了不同的结果这种就可以认为是多态。 多态的优缺点 class Shape {//属性....public void draw() {System.out.println(画图形);} } class Rect extends Shape{Overridepublic void draw() {System.out.println(♦);} } class Cycle extends Shape{Overridepublic void draw() {System.out.println(●);} }class Flower extends Shape{Overridepublic void draw() {System.out.println(❀);} }【使用多态的好处】 1. 能够降低代码的 圈复杂度, 避免使用大量的 if - else 什么叫 圈复杂度 ? 圈复杂度是一种描述一段代码复杂程度的方式. 一段代码如果平铺直叙, 那么就比较简单容易理解. 而如果有很多的条件分支或者循环语句, 就认为理解起来更复杂. 因此我们可以简单粗暴的计算一段代码中条件语句和循环语句出现的个数, 这个个数就称为 圈复杂度. 如果一个方法的圈复杂度太高, 就需要考虑重构. 不同公司对于代码的圈复杂度的规范不一样. 一般不会超过 10 . 例如我们现在需要打印的不是一个形状了, 而是多个形状. 如果不基于多态, 实现代码如下: public static void drawShapes() {Rect rect new Rect();Cycle cycle new Cycle();Flower flower new Flower();String[] shapes {cycle, rect, cycle, rect, flower};for (String shape : shapes) {if (shape.equals(cycle)) {cycle.draw();} else if (shape.equals(rect)) {rect.draw();} else if (shape.equals(flower)) {flower.draw();}} }如果使用使用多态, 则不必写这么多的 if - else 分支语句, 代码更简单. public static void drawShapes() {// 我们创建了一个 Shape 对象的数组. Shape[] shapes {new Cycle(), new Rect(), new Cycle(), new Rect(), new Flower()};for (Shape shape : shapes) {shape.draw();} } 2. 可扩展能力更强 如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低. class Triangle extends Shape {Overridepublic void draw() {System.out.println(△);} }对于类的调用者来说(drawShapes方法), 只要创建一个新类的实例就可以了, 改动成本很低. 而对于不用多态的情况, 就要把 drawShapes 中的 if - else 进行一定的修改, 改动成本更高. 多态缺陷代码的运行效率降低。 1. 属性没有多态性 当父类和子类都有同名属性的时候通过父类引用只能引用父类自己的成员属性属性即成员变量 2. 构造方法没有多态性   向下转型 讲了向上转型之后就有必要延伸讲一下向下转型了。 注意向下转型跟向上转型的来源不一样向下转型来源并不是跟向上转型一样通过创建对象去形成的。 我们看看如果向下转型跟向上转型一样通过创建对象去形成会产生什么现象。 发生了类型转换异常。这可能是因为d引用在这时能访问的空间只有B类所创建的空间d引用本身还能访问除了B类空间的其他空间但我们只创建了B类空间其他本身能访问的空间并没有创建出来所以因为不能访问整个完整的D类空间从而发生错误。使用d时无论调用谁都会报错。 所以向下转型不是跟向上转型一样通过创建对象去发生的它的基础是要在发生了向上转型后才能发生向下转型如下 将一个子类对象经过向上转型之后当成父类方法使用再无法调用子类的方法但有时候可能需要调用子类特有的方法注意特有此时将父类引用再还原为子类对象即可即向下转换。 代码如下  public class TestAnimal {public static void main(String[] args) {Cat cat new Cat(元宝,2);Dog dog new Dog(小七, 1);// 向上转型Animal animal cat;animal.eat();animal dog;animal.eat();// animal.bark();// 编译失败编译时编译器将animal当成Animal对象处理// 而Animal类中没有bark方法因此编译失败 //所以我们需要将其向下转换向下转换需要强制转换// animal本来指向的就是狗因此将animal强制还原为狗也是安全的 //只要dog能访问到自己本身就能访问的全部空间代码就算成功。   dog (Dog)animal;dog.bark();} } 而会出现以下代码就是不安全的了  public class TestAnimal {public static void main(String[] args) {Cat cat new Cat(元宝,2);Dog dog new Dog(小七, 1);// 向上转型Animal animal cat;animal.eat();animal dog;animal.eat();cat (Cat)animal;cat.mew(); // 现在要强制还原为猫无法正常还原运行时抛出ClassCastException //发生了类型转换异常这是因为cat引用不能访问自己本身就能访问的全部空间 //这个跟我最前面讲为什么向下转换不能通过创造对象去形成一样的道理 }} 向下转型用的比较少而且不安全万一转换失败运行时就会抛异常。Java中为了提高向下转型的安全性引入了instanceof 如果该表达式为true则可以安全转换。 public class TestAnimal {public static void main(String[] args) {Cat cat new Cat(元宝,2);Dog dog new Dog(小七, 1);// 向上转型Animal animal cat;animal.eat();animal dog;animal.eat();if(animal instanceof Cat){cat (Cat)animal;cat.mew();}if(animal instanceof Dog){dog (Dog)animal;dog.bark();}} }instanceof操作符 如果右边类的类型为左边引用所指向的对象的类型或者右边类的类型为其父类则返回true。不是则返回false。 如上代码animal指向dog对象dog对象的类型为Dog所以右边类型只有Dog或animal才能返回true其他都是false。 避免在构造方法中调用重写的方法 一段有坑很好玩的代码 我们创建两个类, B 是父类, D 是子类. D 中重写 func 方法. 并且在 B 的构造方法中调用 func。 看看打印结果  class B {public B() {// do nothingfunc();}public void func() {System.out.println(B.func());} }class D extends B {private int num 1;Overridepublic void func() {System.out.println(D.func() num);} }public class Test {public static void main(String[] args) {D d new D();} }// 执行结果 D.func() 0 对于这结果你们肯定很有疑惑且听我们慢慢道来  构造 D 对象的同时, 会调用 B 的构造方法. B 的构造方法中调用了 func 方法, 此时因为构造方法中隐含着this而在父类构造方法中隐藏着  B this 这个引用变量接收的引用却是D类型引用所以发生了向上提升而在父类与子类中又发生了重写且还用到了func这个重写方法在func前面隐藏着this.    此时this代表着B这个父类引用所以导致触发动态绑定, 会调用到 D 中的 func  。 而我们还要知道一个很重要的一点在构造方法完成后才会对成员变量进行初始化在构造方法完成前成员变量的值都是基础值。 所以因为我们在构造方法还没完成时就用了成员变量该成员变量还未进行初始化变为1依然是保持基础值所以打印时其num值为基础值0 这就是打印出该结果的原因。 结论: 用尽量简单的方式使对象进入可工作状态, 尽量不要在构造器中调用方法(如果这个方法被子类重写, 就会触发动态绑定, 但是此时子类对象还没构造完成), 可能会出现一些隐藏的但是又极难发现的问题 。所以在构造函数内尽量避免使用实例方法我们用它去进行初始化成员变量就可以了。

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

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

相关文章

MX 练石 2025 NOIP #10

0 + 45 + 10 + 0 = 55, Rank .笑点解析:NOIP 模拟赛。 可惜没打 D 的暴力,不过 D 暴力给 30pts 也是很厉害了。2025 --【炼石计划 NOIP】-- 第十套 链接:link 题解:link 时间:4h20min (2025.09.28 07:40~12:10) 题…

建设网站多久衡阳网站建设网站

4.1 排序 4.1.1 选择排序 4.1.2 插入排序 4.1.3 排序与sort函数的应用 sort函数参数 sort(首元素地址,尾元素的下一个元素的地址,比较函数(cmp,非必填))如果不写比较函数,那默认对给定区间进行递增排序 如何实现比较函数 从基本数据类型、结构体类型、STL容器进行自定排…

网站改版开发公司360营销

还有两天2010就要结束了,写下自己的年终总结吧,以总结自己,展望明年。2010对我来说是怎样的一年呢?忙碌的一年,鸭梨更大的一年,折腾的一年,复杂的一年,梦游的一年,痛并快…

大港做网站网站建设中倒计时模板下载

计算机综合应用能力实训计算机综合应用能力实训单选题:1、应用倒角命令“chamfer”进行倒角操作时:A、不能对多段线对象进行倒角B、可以对样条曲线对象进行倒角C、不能对文字对象进行倒角D、不能对三维实体对象进行倒角2、不是环形阵列定义阵列对象数目和…

教育局门户网站建设目的不会代码可以做网站吗

🔥博客主页:小王又困了 📚系列专栏:每日一练 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、选择题 📝1.第一题 📝2.第二题 &#x1f4d…

体育视频网站建设wordpress用户名怎么设置密码

学习 Jedis、RedisTemplate、StringRedisTemplate之间的比较 博客中提到:一. Jedis是Redis官方推荐的面向Java的操作Redis的客户端。 二. RedisTemplate,StringRedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更…

网站对域名中国比较大的外包公司

我的目标是能够运行windows 下的大部分PE格式的程序,这一点通过实验已经证明完全是可行的。 PE格式主要有exe dll sys等文件,这三个文件可以用相同的函数解析, 主要有以下段组成, 1、文件头,包含DOS文件头、PE文件头…

昆明网站定制备案时网站建设方案书

上周最新版Firefox 66因为爆出会使微软Office 365中的PowerPoint文字消失的臭虫,Mozilla暂停发送。3月27日Mozilla重新释出修补完成的最新版Firefox 66.0.2。根据Mozilla臭虫报告网页,Firefox 66除了造成Office 365中的PowerPoint文字消失的问题外&#…

域名注册官方网站大连seo皮皮

随着互联网技术的飞速发展,网络安全问题日益凸显。跨站脚本攻击(XSS 攻击)作为一种常见的网络攻击手段,给网络应用和用户数据安全带来了严重威胁。本文深入探讨了 XSS 攻击的原理、分类、危害以及相应的防范措施,旨在提…

idea网站开发好用的网站链接

之前线上服务器分发配置都是用shell和expect脚本分发,脚本写了很长,上周换了ansible,现在自己用python写一个,就30行代码就可以实现需求,之前的shell写了快200行了,蛋疼,代码如下: f…

重庆网络推广网站福州云建站模版

目录 1、安装 2、激活 3、停止 1、安装 1)为项目新建一个目录(比如:目录命名为learning_log) 2)在终端中切换到这个目录 3)执行命令:python -m venv ll_env,即可创建一个名为ll…

国际学院网站建设的意义专业seo培训

郁金香2021年游戏辅助技术初级班(上) %p、size_t、%zd、%llu、FindWindow、GetWindowText、SetWindowTextGetWindowThreadProcessId、OpenProcess、ReadProcessMemory封接读内存接口函数 int R4(void* 地址)跨进程向目标进程内存地址写入数值 WriteProce…

帝国cms能建设视频网站吗重庆神态网站建设

默认情况下,MySQL只允许本地登录,即只能在安装MySQL环境所在的主机下访问。但是在日常开发和使用中,我们经常需要访问远端服务器的数据库,此时就需要开启服务器端MySQL的远程连接权限。1、生成环境,连接MySQL 2、查看M…

家具网站设计网站装宽带多少钱一个月

来源:环球时报据路透社报道,有消息人士表示,俄罗斯政府已经开始与华为公司就36万台平板电脑安装俄罗斯自己研发的操作系统(OS)"极光"(Aurora,也称奥罗拉)的一项计划展开谈判。路透社表示&#xf…

读人形机器人26人类情感

读人形机器人26人类情感1. 人类情感 1.1. AI与人类情感的交汇既带来了前所未有的机遇,也带来了深刻的挑战 1.2. 识别、解读和模拟人类情感的能力也在不断提高,从而重塑了人机交互的格局 2. AI中的情感识别 2.1. 理解…

公司网站模板大全网站是否有管理员权限

当系统出现RPC通讯问题时可以尝安装KB908521进行修复。安装本更新程序可以解决当您在 Microsoft Windows Server 2003 和 Microsoft Windows XP 中的客户端/服务器通信中使用远程过程调用 (RPC) 时发生的各种问题。http://www.microsoft.com/downloads/details.aspx?FamilyID7…

[转]Power Apps component framework (PCF) 手把手入门实例

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics…

做推广的网站带宽需要多少钱万网网站模板下载

在企业环境中,时常需要通过使用HTTP Proxy访问Internet,在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤,以便这些服务能够正常连接到Internet。 一…

网站公司架构wordpress无法批量管理

Docker容器挂载procfs 逃逸 procfs是展示系统进程状态的虚拟文件系统,包含敏感信息。直接将其挂载到不受控的容器内,特别是容器默认拥有root权限且未启用用户隔离时,将极大地增加安全风险。因此,需谨慎处理,确保容器环…

修复lazarus/fpc在windows不支持中文(三)总结

修复lazarus/fpc在windows不支持中文(三)总结原版的fpc及lazarus不支持安装到包含中文及空格的目录,具体原因:一、中文的目录:1)外部的工具链软件不支持中文(make及交叉编译用到的*ld.exe) 2)fpc编译器及lazaru…