Java多态的理解

Trae+Playwright MCP自动化测试全流程指南:从环境搭建到智能体运行 本文提供了一份详细的Trae与Playwright MCP集成指南,涵盖从Node.js、Python环境搭建到智能体创建的全流程。通过结合MCP协议,AI智能体能够理解任务并驱动Playwright执行复杂的浏览器自动化操作,实现从网页数据抓取到端到端测试的智能工作流。 阅读详情

Java中多态的理解

       

      继承的基础知识

        Java中有三大特性:继承、封装、多态

        多态可以说是建立在继承的基础上的,所以我们先来理解一下继承。

        Java中继承的概念是:继承是指一个对象直接使用另一对象的属性和方法(此处引用百度百科)。也就是当一个子类继承了一个父类时,子类也同时继承了父类的非静态属性和方法(可以继承父类的private方法、变量、只是无法通过子类对象修改),那么意思就是子类对象可以调用父类的方法并且可以访问父类的变量(只能改变非私有变量)。

如下例子:

class Father{
   public String name;
   private String id_num;
   public static int age;
   public void say(){
      System.out.println("父类说...");
   }
}
class Son extends Father{
   public void say(){
      System.out.println("子类说...");
   }
}
public class Main{
   public static void main(String[] argv){
      Son son = new Son();
      //可以正确访问并修改
      son.name = "zdy";
      //可以正确访问但不能修改
      son.id_num = 04152017   //此时编译器会报错,因为子类只能访问不能修改父类的private属性
      //无法从父类继承static的属性和方法(因为静态属性和方法是初始化的时候就已经存在的)
      //会执行子类的say方法,因为我们对父类的方法进行了重写(多态)
      son.say();   //会输出“子类说...”
   }
}


        Java中多态的理解

         简单了解完了Java中的继承,我们就来看看多态吧,什么是多态?从字面意思上理解多态就是有多种形态。在编程中我们也可以将多态理解为有多种形态,具体是如何体现多种形态的呢?一般通过两种方式实现多态:覆盖(重写)、重载。

        这两种方式有什么区别又有什么联系?

        首先区别:

            1.覆盖要求子类中的某一方法名和参数和父类中的某一方法名和参数完全一致。而重载只要求方法名一样而参数名必须不           一致

            2.覆盖要求子类中的方法与父类中被覆盖的方法返回类型必须一致。而重载可以不一致(参数列表必须不一致)。

            3.覆盖要求子类覆盖父类的方法中不能有新抛出的异常类型。而重载允许有新抛出的异常类型。

           4.覆盖要求子类覆盖父类的方法的访问权限必须比父类的对应方法大(public > protected > default > private)。而重载           则没有这种限制。

        联系:

            1.都是Java中多态性的典型体现。

            2.都基于Java的继承机制。    


            理解了上面的基本概念后我们应该对多态有了一个初步的认识,但是多态真正的概念是:指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

            为了更好地理解多态,我们引入一个概念:“向上转型”。我们先来看如下示例代码:

public class Main{
   public static void main(String[] argv){
      Father f = new Son();
      f.say();
   }
}

              Father类和Son类仍沿用上面示例的类。这种写法可能很多初学者都理解不了了,本应指向Father类的对象怎么能指向Son类呢?这时就是向上转型了。Son类的对象向上转型为Father类的对象,然后被Father类的变量引用了。这就是我们所说的运行时多态,特点就是:父类对象在运行时可以表现子类特征。所以这里调用say方法时看子类中是否重写了say方法,如果重写了say方法那么调用子类中重写的say方法,反之调用父类中的say方法。

              看一个很经典的案例:

class A{
   public void say(A obj){
      System.out.println("A and A");
   }
   public void say(D obj){
      System.out.println("A and D");   
   }
}

class B extends A{
   public void say(B obj){
      System.out.println("B and B");
   }
   public void say(A obj){
      System.out.println("B and A");
   }
}

class C extends B{
   
}

class D extends D{

}

public class Main{
   public static void main(String[] args){
      A a = new B();
      B b = new B();
      a.say(b);
   }
}

            我们分析一下这段代码的运行结果,首先我们创建了一个A类的变量a指向B类的对象,然后正常实例化一个B类的引用变量b,最后用a调用say方法将b作为参数传进去。用a调用say方法,由于对象a在运行时体现的是子类的特征所以我们在子类中找say方法,在看传入的参数,是一个B类的实例对象,看到这里很多人会认为答案是“B and B”(包括几天前的我),那么就错了,首先我们定义的是一个A类的引用变量,这个引用变量能调用的方法只有父类的方法和子类中重写父类的方法,say(B obj)方法明显是重载父类的方法,所以我们是不能调用的,那为什么会调用say(A obj)方法呢?首先我们知道,运行时多态是会向上转型的,B类的对象实例会转为A的对象实例,那么参数就满足了,由于A类中的say(A obj)方法被子类B重写所以只会调用子类的方法,所以,最终的输出结果是“B and A”。

            实际上多态中有一个方法调用的优先级:this.fun(obj) > super.fun(obj) > this.fun(super(obj)) > super.fun(super(obj))

            我们可以从内存的角度来解释一下,首先A类的引用变量可以指向成员变量和成员方法的数目是不能变的,所以多态中父类的引用变量只能引用父类与子类共有的部分(总数不变),共有的部分指父类的所有属性和方法,如果子类中有重写父类的属性和方法则包括重写的属性和方法,无法引用子类中特有的属性和方法。

            

            


Probability and Statistics - 4th edition 立即下载

相关推荐

NY8A053E 例程 之 PWM Ouput

更多关于NY8A053E的相关例程请留言!

倪彬笑阳的博客 2924

深入理解重写、隐藏、和静、动态绑定的本质

深入理解重写、隐藏、和静、动态绑定的本质 文章目录问题引入重写隐藏动态绑定通俗理解静态绑定总结总结 问题引入 大家都知道成员方法能被继承和重写,那么静态变量或者静态方法能否被子类继承?能否被重写? 于是写了一段代码先验证下: //定义父类 public class SuperClass { static int SuperVar = 10; public static void method(){ System.out.println("this SuperClass");

从左到右 764

MatterPort3D 数据集下载

【代码】MatterPort3D 数据集下载。

qq_44106838的博客 6770

探索Java中的多态

多态是指同一个方法在不同对象上具有不同的行为。通过多态,程序可以在运行时决定调用哪个方法,从而提高代码的灵活性和可扩展性。多态是Java中一个重要且强大的特性,它允许在运行时根据对象的实际类型调用相应的方法,从而提高代码的灵活性和可扩展性。通过方法重载、方法重写、接口和抽象类,可以实现多态,并在实际开发中广泛应用于代码复用、接口回调和工厂模式等场景。希望本文能帮助您更好地理解和应用Java中的多态。如果您有任何问题或建议,欢迎留言讨论。

梦想家星空的博客 914

MaxEnt运行报错的各种问题及解决方法

由于我使用的环境数据并不是大部分人常用的worldclim上下载的气候数据,而是使用不同的四类环境数据,分别包括:降雨数据、气温数据、氮沉降数据和大气CO2浓度数据,数据需要分别从不同的网站下载,因此并不能得到非常一致的数据文件,导致MaxEnt运行时出现了各种各样的错误。文件终于能够读取了,然而计算到一半又弹出第三种问题,根据弹出的报错提示,找到错误所在那一行,用Notepad++打开,可以发现,这一行确实存在nan值,导致文件读取无法正常进行。出现上图所述的问题时,检查环境变量是否具有相同的行列号。

guye322的博客 1万+

Flutter + shorebird 热更新+自定义cdn下载

本文介绍了如何优化Flutter热更新方案Shorebird在国内网络环境下的使用体验。Shorebird默认使用海外CDN存在下载慢、连接不稳定等问题,建议将补丁包上传至国内CDN(如阿里云OSS)。文章详细讲解了Shorebird环境配置、项目集成、构建发布流程,并重点说明了如何修改客户端代码实现自定义补丁下载逻辑。通过替换默认下载器,将补丁下载地址指向国内CDN,可显著提升下载速度和稳定性。这种方案既保留了Shorebird的热更新能力,又解决了国内网络环境下的痛点,适合国内企业部署使用。

sir_Hu的博客 769

Java多态的认识和理解

多态是面向对象程序设计的三大特征之一,面向对象的三大特征:封装、继承、多态。 封装给对象提供了隐藏内部特性和行为的能力,保护对象内部的状态,提高了代码的可用性和可维护性。 继承关系使一个子类能继承父类的特征,而不需要再次编写相同的代码,并且附加一些新特征。子类是它的父类的特殊化,每个子类的实例都是其父类的实例。 概念 同一个行为具有多个不同表现形式或形态的能力,指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。 理解 多态是同一个...

m0_64742984的博客 2281

研究生研一学习机器学习ML、深度学习DL的规划

研究生学习机器学习DL、深度学习DL的规划 保上研之后也没有很好规划自己的学习路线,看到b站上的一位清华博士讲述他本科也是机械跨考计算机的学习路线,所以记录下来,从现在开始按照规划来一点一点地做好。 掌握python(推荐一周) 1.1 面向对象编程 廖雪峰python网站: https://www.liaoxuefeng.com 1.2 数据分析Numpy numpy 100题: https://www.yanxishe.com/columnDetail/24784 1.3数据分析pandas pan

没有最好,只有更好 3098

【Java】多态的含义、多态的作用及多态的详细代码实现

1.多态的含义 什么是多态,就是一个事物有多种形态,比如说是老师是老师,他也是人,也是丈夫或者妻子,或者光棍儿,这就阐述了多种形态。

m0_64210833的博客 6133

[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算

PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。本文对PUMA560机器人逆运动学进行分析并MATLAB计算

m0_72676510的博客 1947

【学习系列】SAP RAP 2:创建第一个RAP应用

本文介绍了从零开始创建基于SAP RAP(ABAP RESTful Application Programming Model)的Fiori应用的完整流程。首先说明了学习RAP需要结合官方文档和教程,并提供了相关资源链接。文章详细讲解了开发环境的准备要求,包括系统版本、开发工具和基本知识。重点演示了如何通过8个步骤创建支持CRUD操作和草稿功能的RAP应用:1)创建数据库表;2)定义CDS视图实体;3)创建投影视图;4)定义行为;5)创建行为投影;6)定义服务;7)绑定服务;8)添加UI注解。

DeveloperMrMeng的博客 1496

十分钟弄懂 java 中==、equals、hashCode 的区别

先来个总结: ==运算符是判断两个对象是不是同一个对象,即他们的地址是否相等 object类中equals与==是等效的 覆写equals更多的是追求两个对象在逻辑上的相等,你可以说是值相等,也可说是内容相等。(覆盖以后,覆盖equals时总要覆盖hashCode ) hashCode用于返回对象的hash值,主要用于查找的快捷性,因为hashCode也是在Object对象中就有的,所以所...

程序猿踩坑集锦 486

Python爬虫实战:利用Playwright与异步技术高效抓取链家十万级二手房数据

在开始编写代码之前,我们首先需要为项目选择合适的技术栈。1. 传统方案:Requests + BeautifulSoup优点: 简单、轻量、学习成本低。直接发送HTTP请求获取HTML,然后解析。缺点: 对于大量由JavaScript动态渲染的内容无能为力。现代网站(包括链家)大量使用JS来加载数据和实现交互,简单的HTTP请求无法获取到完整的页面内容。此外,容易被基于IP或请求头特征的反爬机制拦截。2. 进阶方案:Selenium优点。

2201_76125261的博客 889

JAVA中多态的理解

JAVA中多态的理解以及使用。

zhangguan96的博客 5168

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java多态的理解及实现原理

为了方便理解,鄙人觉得回答了下面这几个问题,这玩意大概就理解了: 1.多态是个什么鬼? 2.为啥需要多态?多态的优势在哪?劣势在哪? 3.如果需要,那么它是怎么实现的,原理是什么 4.如何使用和使用场景是什么? 下面开始回答上面的问题,额,好吧,这个是我百度了好多地方然后结合自己理解搞的,不过基本就是这个意思 先从1搞起: 官方是说: 接口的多种不同的实现方式即为多态。 多态性是...

z936689039的博客 1857

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java 封装、继承、多态的理解

更好的阅读体验:Java封装、继承、多态的理解 1.封装 封装:就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。让使用者知道的才暴露出来,不需要让使用者知道的全部隐藏起来 封装的好处:避免使用者直接操作属性值,隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;可以方便的加入存取控制语句,限制不合理操作,提高程序安全性。 1.1.封装的实现 Java是使用“访问控制符”来控制哪些细节需要封装的,哪些细节需要暴露的。 Java中有4种访问控制符,分别为private,defaul.

持 开源思想,撰 必胜所学,望 勤学者,无难处 5954

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java的多态怎么理解_JAVA多态的理解

面向对象的三大特性:封装、继承、多态,其中最难理解的就是多态以下是网上某大神给的一个例子:1.继承关系classA{publicStringshow(Dobj){return("AandD");}publicStringshow(Aobj){return("AandA");}}classBextendsA{publicStringshow(Bobj){re...

weixin_35792236的博客 388

Java 多态理解

多态:同样的引用调用同样的方法却做了不同的事情。 概述: 在设计一个方法时,通常希望该方法具备定的通用性。 例如要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫类的叫声,传人犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象就是多态。 在Java中为了实现多态,允许使用一个父类类型的变...

2987345656@qq.com的博客 1万+

Java中的多态如何理解——详解

🎈🎈🎈本篇文章我们主要讲解的是Java中的多态,那么什么是多态呢?同类型的对象,执行同一个行为,会表现出不同的行为特征。接下来让我们一起对多态进行详细地讲解。

weixin_50635856的博客 8336

对JAVA多态的理解

对JAVA基础多态的理解 多态是JAVA中面对对象的一种体现,它也提高了一段代码的复用性和扩展性。 所谓的多态,用一句话来说:相同的行为,不同的实现 多态又分为两种:静态多态 和 动态多态 静态多态 这里的静态是与static无关,那什么叫静态多态? 它是指:某个方法在编译期就确定了运行期调用的是哪个实现。 比如: 单独的方法重写 在继承关系中,子类拥有和父类相同的行为,但是允许子类重新实现。换句...

qq_44908957的博客 871

关于Java中多态的再理解

前言 本人在复习JavaSE的过程中,发现之前对于多态的理解简直不忍直视,最可怕的是最开始,被某个坑逼培训机构的老师带成了,重载和重写是Java中的多态的体现。这错的离谱的概念。 Java三大特性之一之多态 这篇文章主要是自己对于多态的一个理解,如有不当之处,欢迎大家指正! Java的三大特性:继承、封装、多态 在Java中多态的三种形式: 1. 普通类的多态形式 2. 抽象类的多态形式 3. 接...

weixing2580的博客 208

Java中关于多态的理解

Java中关于多态的理解

我不是攻城狮的博客 878

【理解Java的多态】

在面向对象编程(OOP)中,多态是指同一方法或操作,在不同的对象上表现出不同的行为。它允许对象通过统一的接口来调用不同的实现,从而提高代码的灵活性和可扩展性。多态的实现依赖于继承和接口的机制,是Java语言的一大特色。方法重载(Overloading):同一方法名,可以根据参数类型或数量的不同,定义多个不同的方法。方法重写(Overriding):子类重写父类的方法,方法名、参数列表保持一致,但可以实现不同的功能。

solity123的博客 970

Java中多态的理解

目录 定义 多态的条件 多态的实现 多态的总结 一句话 其他情况 定义 多态就是指程序中定义的引⽤变量所指向的具体类型和通过该引⽤变量发出的⽅法调⽤在编 编译时并不确定,⽽是在程序运⾏期间才确定。(注意:成员变量没有多态性后面会讲到) 分析: 多态的主体指的是对象变量也就是对象的引用 A a1=new B( ); 指的是这里的变量a1。 只有在变量调用方法的时候才可能存在多态,成员属性比如a1.num不存在多态。 调用方法的结果在编译时并不确定,运行时确定,...

alphadunk的博客 245

Java多态【理解篇】

由一道Java多态题引发的思考,仅以记录,希望可以帮助到有需要的人; 目录 1.Java多态: 2.多态题目: 3.解题思路: 1.Java多态: 定义:多态是同一个行为具有多个不同表现形式或形态的能力。既:一种事物的多种形态,代码在编译时和运行时,类型不一致,就产生了多态。 2.多态题目: public static void main(String[] args) { /** * 父类A,B,C,D都为子类。 * * 优先级由高到低依次为:this.show(O

qq_40800950的博客 404

深入理解java多态

本文转载自@宜春博主的博文,原文地址点此 在博主认为多态绝对是面向对象的第三大特性中让很多小白同学以及初学者难以跨越的鸿沟,因为多态有很多细节性的知识,不花点时间,还真不好理解多态。这么说吧,如果你觉得你已经完全理解了多态,你不妨做做下面的程序,如果你能全都答对,那没问题了,多态对你来说真的不是问题!如果在第四个就趴下了,那可以看看这篇文章,或许对你有所帮助,可能会让你重新见识到多态的魅力。 package Polymorphic; //爷爷类 class Ye { public String

Ricartc的编程梦 684
上一篇: Java中String、StringBuffer、StringBuilder的总结
下一篇: Java中抽象类与接口的区别
Zh.EastSun
博客等级 码龄10年 2粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值