Java中字段不存在多态

【Java基础知识 17】Java继承和多态 关键字extends表明正在构造的新类派生于一个已存在的类。已存在的类称为超类(superclass),新类称为子类(subclass)。超类和子类是 Java 程序员最常用的两个术语。在设计类的时候,应该将通用的方法放在超类中, 而将具有特殊用途的方法放在子类中。 阅读详情

先看一段代码:

import java.util.HashMap;
import java.util.Map;

class Father{
    String name = "father";
    public String getName(){
        return name;
    }
}
class Son extends Father{
    String name = "son";
    @Override
    public String getName(){
        return name;
    }
}

public class Test {
    public static void main(String[] args) throws InterruptedException {
        Father son = new Son();
        System.out.println(son.name);       //father
        System.out.println(son.getName());  //son
    }
}

为什么通过son.getName()可以获取到想要的内容?
因为这里涉及到了方法重写,在虚拟机执行过程中会通过一个invokeVritual的指令来确定到底执行哪个方法。该指令会通过运行时方法接收者的实际类型来确定执行哪个方法,其解析过程如下:

① 找到操作数栈顶第一个元素(接收者)的实际类型,记为C。
② 看C中是否存在目标方法,如果存在则进行权限校验,检验通过则返回该方法直接引用,校验未通过则抛出java.lang.IllegalAccessError异常。
③ 如果C中不存在目标方法,则向上对其父类进行相同查找。
④ 父类中都没有找到合适的方法,则抛出java.lang.AbstractMethodError异常。

在这个例子中,接收者实际类型是Son,而其中就有一个简单名称和描述符都一样的方法,那就确定最终调用的就是Son::getName()方法;而Son::getName()返回的是子类中的name。

为什么通过son.name却不行?
因为Java中字段是不参与多态的。在这个例子中,son对象的外观类型是Father,因此调用son.name得到的就是Father类中的name属性。

遇到这种需求时如何解决?
尽量避免通过对象直接访问其内部属性,可以为属性设置get\set方法来访问其内部属性。

ECC密码的加密和解密(附带代码实现) ECC,全称Elliptic Curve Cryptography,是椭圆曲线密码学。这是一种公钥加密技术,其安全性基于椭圆曲线离散对数问题,被广泛应用于信息安全领域。ECC的主要优势在于,相较于RSA和DSA等其他传统的公钥密码体系,它能够在提供相同安全级别的情况下,使用更短的密钥,从而减少计算量和存储空间的需求。例如,一个256位的ECC密钥提供的安全性可以与3072位的RSA密钥或DSA密钥相媲美。ECC的主要应用领域包括SSL安全证书、安全电子邮件、移动设备安全、物联网设备安全等。 阅读详情

相关推荐

从赛题到实战:一份面向高职“区块链技术应用”赛项的食品溯源系统全栈部署与运维指南

本文为高职院校学生备战“区块链技术应用”技能大赛提供了一份详实的食品溯源系统全栈部署与运维指南。内容涵盖从理解赛题业务逻辑、绘制技术蓝图,到搭建4节点FISCO BCOS联盟链、部署管理平台与智能合约,再到核心运维技能与前后端联调测试的完整流程,旨在帮助参赛者将赛题转化为可运行的实战项目,全面提升区块链全栈开发与运维能力。

weixin_29172201的博客 680

Java多态讲解(1)

尽管animal的编译时类型是Animal类,但实际对象是Dog类型的实例,因此调用c1.show()时,实际调用的是Dog类中定义的方法,输出结果是"子类方法"。即使实际对象是Dog01类型,c1.a仍然会访问Animal01类中定义的a成员变量,而不是Dog01类中定义的a成员变量,因为c1的编译时类型是Animal01。而成员方法和成员变量则属于具体的实例对象,每个对象拥有自己独立的一份。多态的本质就是通过父类的引用变量来引用子类的对象,并根据具体的对象类型执行相应的方法,从而实现动态绑定的机制。

m0_71469414的博客 498

手把手教你实现阿克曼ROS小车的运动控制

本文详细介绍了如何从零开始实现阿克曼ROS小车的运动控制。内容涵盖硬件搭建、STM32底层PID速度与舵机控制、ROS层阿克曼运动学模型解析,以及上下位机通信协议设计。通过手把手的代码示例和调试步骤,帮助机器人爱好者与开发者掌握将高级速度指令转化为小车具体动作的全流程,实现流畅的阿克曼转向控制。

weixin_29193259的博客 199

java多态-属性没有多态性

#java多态的定义 运行时绑定 ##绑定 java编程思想原文:Connecting a method call to a method body is called binding 翻译:将一个方法调用同一个方法主体关联起来称作绑定 ###结论 java属性没有多态,因为java的多态是运行时绑定,而绑定指的是方法 ...

Titan_6379的博客 710

Win10家庭版中文用户名改英文全攻略:从注册表到环境变量一步不落

本文详细介绍了Windows 10家庭版中文用户名改为英文的完整流程,包括注册表编辑、环境变量调整等关键步骤。通过激活管理员账户、重命名用户文件夹、修改注册表键值等操作,彻底解决因中文路径导致的软件兼容性问题,并提供常见错误解决方案和系统维护建议。

weixin_29227425的博客 427

高通thermal-engine.conf配置详解:从虚拟传感器到CPU频率控制的完整指南

本文深入解析了高通thermal-engine.conf配置文件的架构与调优方法。从虚拟传感器的加权融合原理,到监控算法与CPU频率控制的多级策略,提供了完整的配置详解与实战调试指南。文章旨在帮助开发者与高级用户掌握底层温控逻辑,在性能与散热间实现精准平衡,并详细介绍了日志调试与场景化配置等高级技巧。

weixin_28327051的博客 494

Java基础学习:多态性

Java基础

m0_53193272的博客 178

从VBA到Python:探索CODE V API在MTF数据分析中的跨语言实践

本文详细介绍了如何从VBA转向Python,利用CODE V API实现MTF数据分析的高效工作流。通过Python的科学计算库和现代API设计,光学工程师可以大幅提升数据处理和可视化效率,实现自动化报告生成和性能优化。

weixin_29239661的博客 441

Java基础——字段不存在多态特征

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34365635的博客 169

在WSL2中配置代理(Windows)

通过按照上述步骤在WSL2中配置代理,我们可以轻松地在Windows子系统Linux中使用代理服务器访问互联网。请确保提供正确的代理服务器地址和端口号,并根据实际情况进行修改。在WSL2中使用代理是一个常见的需求,它允许我们在Windows子系统Linux中通过代理服务器访问互联网。本文将详细介绍如何在WSL2中配置代理,并提供相应的源代码示例。如果返回的IP地址与代理服务器所在地不同,说明代理正常工作。希望本文能对你有所帮助!如有其他问题,请随时向我提问。替换为实际的代理服务器地址和端口号。

FcUnity的博客 4355

YOLOv8实战教程:从模型训练到改进的全流程指南

回顾这段YOLOv8的实战历程,从最初的模型训练到后来的各种改进尝试,我深刻体会到目标检测技术的魅力与挑战。YOLOv8作为一款优秀的框架,不仅易用性强,而且具备很强的可扩展性,让我能在其基础上不断创新。未来,我计划在以下几个方向继续探索:一是将YOLOv8与多模态技术结合,尝试实现图像与文本的联合目标检测;二是深入研究自监督学习在YOLOv8中的应用,减少对标注数据的依赖;三是探索YOLOv8在更广泛场景的部署,如机器人、自动驾驶等。

LXY_LOVE36的博客 279

java java面向对象-字段不存在多态特征

20180317 java java面向对象-字段不存在多态特征以下是字段不存在多态特征的例子:eg:class SuperClass{  public String name = "Super.name";  public void doWork()  {    System.out.println("Super.doWork");  }}class SubClass extends Super...

weixin_39089680的博客 467

4.4 直流无刷电机(BLDC):控制器硬件设计

摘要 本文详细阐述了直流无刷电机(BLDC)控制器的硬件设计要点。控制器硬件主要包括微处理器单元、功率驱动模块、信号检测电路、通信接口和电源管理模块。在微处理器选型方面,分析了ARM Cortex-M系列、DSP等架构的适用场景,并对比了不同处理器的性能参数。功率驱动模块设计重点包括栅极驱动电路、逆变桥热管理和电流保护机制。信号检测部分介绍了位置传感器接口和模拟信号调理技术。此外,还讨论了通信接口设计、电源管理方案以及硬件布局与EMC设计规范。最后强调了硬件测试验证的重要性,包括故障注入测试等验证方法。整体

技术工作者 184

【Java】字段不存在多态特征

class SuperClass { static String name = "SuperClass"; public void doWork(){ System.out.println("SuperClass.doWork"); } } class SubClass extends SuperClass { static String name = "SubClass"; public void doWork(){ System.out.println("SubClass.doWor

pangpd的博客 206

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

java如果字段不存在,Java基础——字段不存在多态特征

通过对象调用字段,在编译时期就已经决定了调用那一块内存空间的数据。字段不存在覆盖的概念,没有多态特征,只有方法才存在。(多态特征指运行时体现子类特征) 程序示例:class Animal{String name= "animal";public void eat(){System.out.println("吃");}}class Dog extends Animal{String name= "d...

weixin_42157567的博客 578

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java如果字段不存在则执行_Java 字段不存在多态

1 public class main{2 public static void main(string[] args) {3 a class = new a();4 system.out.println(class.a);5 system.out.println(class.geta());6 a aclass = new ...

weixin_32824625的博客 187

Java 字段不存在多态

1 public class Main{ 2 public static void main(String[] args) { 3 A Class = new A(); 4 System.out.println(Class.a); 5 System.out.println(Class.getA()); 6 ...

weixin_30922589的博客 190

JAVA静态方法与属性(字段) 不存在多态性

java 代码: 测试准备: public class A { //父类 public static String staticStr = "A静态属性"; public String nonStaticStr = "A非静态属性"; public static void staticMethod(){ System.out.println("A静态方...

shadow_zed的博客 1477

JAVA的三大特征之一--------------多态

一:多态的定义: 一个对象有多种形态 就称为多态 package 面向对象.多态.A; class Animal { void eat() { System.out.println("动物吃东西!"); } } class Dog extends Animal{ void eat() { Syste...

weixin_40876986的博客 247

java中父类和子类的成员变量可以重名吗

Java允许子类声明与父类同名的成员变量(字段隐藏),但需注意:1)子类和父类的同名变量独立存储;2)子类方法中默认访问子类变量,使用super可访问父类变量;3)字段访问不遵循多态,由引用类型决定访问哪个变量。示例显示,Parent obj访问父类变量,Child obj访问子类变量,子类方法中可通过super访问父类变量。

weixin_61523952的博客 530

java中static代码块,final关键字

1.字段不存在多态性 字段没有覆盖,只有隐藏。 调用的是哪一个类中的字段是在编译的时候就已经决定了 由编译类型SuperClass决定 2.代码块 在{ }内的是一个代码块 1)在类内的代码块 作用:初始化。一般不使用 2)在类内的静态代码块(static) 作用:初始化操作,加载资源,加载配置文件

qq_39396275的博客 490

继承成员变量和继承方法的区别

最核心区别:方法支持重写(Override)且支持多态,成员变量仅支持隐藏(Hide)且无多态,这是继承中字段和方法的本质差异;行为本质:隐藏的成员是独立存在的(父子类各有一份),重写的方法是实现替换的(父子类共用签名,仅子类实现有效);多态关键:父类引用指向子类对象时,字段看引用类型方法看对象实际类型,这是多态场景下的核心访问规则;修改规则:字段隐藏无任何语法限制,方法重写有严格的签名、权限、返回值等规则,@Override注解可校验方法重写的合法性;静态成员。

编写博客,学习交流 603

1.代码块

文章目录一.字段不存在多态特征二. 什么是代码块三. 代码块的分类四. 代码的执行顺序(面试) 一.字段不存在多态特征 通过对象调用字段,在编译时期就已经决定了调用哪一块内存空间的数据。 字段不存在覆盖的概念,没有多态特征(在运行时期体现子类特征)。 只有实例方法有覆盖的概念 当子类和父类存在相同的字段的时候,无论修饰符是什么(即使private),都会在各自的内存空间存储 数据。 ...

自我学习总结 128

分析数据库版本不一致的小程序

由于我们在开发过程中无法实时地与每个客户的数据库保持一致,因此,经过一段时间,出现数据库各个学校不尽统一的情况也在所难免,现上传一个今天刚写的分析两个不同的库之间表和字段是否一致的小程序与大家共享。 为了便于理解,现需要说明如下: 1.连接数据库的部分不要使用带上下文的,写个简单的数据库连接即可 2.程序中采用内部类来记录数据信息,同时对内部类的构造函数使用了多态 3.为了实现程序的通用,对于需要

甘谷天蚕网络技术有限公司 549

Java中字段不参与多态

字段不参与多态 学习到这里的时候很好玩,记录一下。 直接来个例子,如果你能答对,也就不用看这这篇文章了。 public class FieldHasNoPolymorphic { static class Father{ public int money = 1; public Father(){ System.out.println("father`s constructor is invoked by:" + this);

qq_44707077的博客 462

java 字段没有多态性

字段没有多态性,即java中只有虚方法存在,字段永远不可能是虚的。 代码一: public class FiledHasNoPolymorphic { static class Father{ public int money=1; public Father(){ money=2; show(); } public void show() { System.ou

fafawf的博客 452
上一篇: Java类加载过程中的双亲委派模型
下一篇: Java创建线程的几种方式
小菜大白
博客等级 码龄10年 4粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值