首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够被重写么?...意思就是: 在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。...而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。...访问隐藏域的方法 就是使用父类的引用类型,那么就可以访问到隐藏域,就像我们例子中的代码 就是使用类型转换System.out.println(((Super)c1).s); 翻译自http://www.programcreek.com

3.5K40

java内部类----安全问题-----访问外围类的私有变量

我们知道如果一个变量是私有的,它应该就不希望别人去访问它。 隐秘的访问方法需要拥有包的可见性,所有攻击代码需要与被攻击类放在同一个包中。...当使用了内部类的时候,编译器做了这样一件事: 它在外围类添加了一个静态方法  static boolean access$0(外部类); 内部类方法将调用这个函数 这个是有风险的,因为任何人都可以通过access...$0方法很容易的读取到外围类的私有域 黑客可以使用十六进制编辑器轻松创建一个用虚拟机指令调用这个函数的类文件。...结论就是: 如果内部类访问了私有数据域,就有可能通过附加在外围类所在的包中的其他类访问它们。 请慎用!

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++自定义类的对象对于其私有变量的访问

    “在C++的类的作用域内,可以对其私有成员变量进行操作” 以下语法规则是不言自明的: 在自定义类A的成员函数中,可以对该类的私有成员变量进行赋值等操作,但是在类定义之外所声明的A类的对象aobj是不可以直接访问...A类的私有变量的,只有通过在A类的成员函数中开放访问其私有变量的接口,对象aobj才可以对私有变量进行操作。...{ A temobject; //定义A类的临时对象 temobject.m_para = 1; //对临时对象的私有成员变量进行赋值 } 这样的写法是可以正确运行的,只是过了一段时间重读代码的时候产生了疑问...这个看似不是问题的问题困扰了我几天,最后对这一问题的解答也就是开篇的第一句话———— 在C++的类的作用域内,可以对其私有成员变量进行操作 关键就在于对“类作用域”的理解。...由于我在A类的成员函数中定义的是A类的临时对象,因此仍在其作用域内,所定义的临时对象也就可以直接访问其私有成员变量了。

    1.5K10

    C++从入门到精通——类的定义及类的访问限定符和封装

    public:公共访问限定符,被声明为public的成员可以在类的内部和外部被访问到。这意味着可以在任何地方访问该成员。...protected:保护访问限定符,被声明为protected的成员可以在类的内部被访问到,但不能在类的外部被直接访问。但是,它可以被继承该类的派生类访问。...private:私有访问限定符,被声明为private的成员只能在类的内部被访问到,不能在类的外部和派生类中被直接访问。...访问限定符说明 public修饰的成员在类外可以直接被访问 protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的) 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止...public成员可以被类外部的代码访问,private成员只能在类内部的成员函数中访问,protected成员可以在类内部的成员函数和其子类中访问。

    30410

    从源码角度分析一次诡异的类被加载问题

    最近有同学在做 APM 链路监控发现了一个诡异的类被加载的问题,没有被调用到的函数里面用到的类,居然触发了类加载,于是结合 JVM 的源码做了一下分析,过程如下: 现象描述 简化后有如下几个类,其中 IParent...从 idea 的代码提示也可以确认 TestA 的 test 方法是没有人调用的。...通过 jvm 启动参数 -verbose:class 查看类加载的情况: IParent 和 ChildImpl 这两个类居然被加载了。...看到这里,可能有同学已经猜到了,是因为多态导致了对应的问题出现。接下来我们从 JVM 源码的角度看一下这个过程。...到这里就很清楚为什么函数没有被调用到,函数内用到的类竟然被加载了。 简单总结就是:TestB 类被加载的过程需要进行校验类文件的合法性,其中一项就是函数调用的参数赋值是否合法。

    82810

    变量访问被ARM架构安排的明明白白

    举例来说,同样是访问外设寄存器,过去在8位和16位机时代,人们喜欢给每一个寄存器都单独绑定地址——当作全局变量来访问,而现在Cortex在架构上更鼓励底层驱动以寄存器页(也就是结构体)为单位来定义寄存器...,这也就是说,同一个外设的寄存器是借助拥有同一个基地址的结构体来访问的。”...每访问1次全局变量,总共需要3条指令,访问3次全局变量用了「12条指令」。 ? 14....由上图可知: 结构体变量peng位于bss段,地址是4000802c 访问结构体成员也需要利用pc找到结构体变量peng对应的文字池中地址40008028,然后间接找到结构体变量peng地址4000802c...执行结果 可以看到代码已经被优化到5条。 14. 把peng的地址40008024装载到r3中 15. r0写入立即数0x11 16. r1写入立即数0x22 17. r0写入立即数0x33 18.

    87630

    【C++篇】C++类和对象实践篇——从零带你实现日期类的超详细指南

    这些变量用来存储每个日期对象的具体信息。 _year:表示年份 _month:表示月份 _day:表示天数 这些变量被定义为私有,确保它们只能通过类的方法来访问和修改。...为了实现 Date 类的输出重载,我们可以将其声明为友元函数,使得它能够访问 Date 类的私有成员变量。 思考: 为什么我们推荐使用友元函数来重载流插入与流提取运算符?...这违背了封装的原则,因为你可能不希望类的私有数据在其他不必要的情况下被访问。...Date 类的设计初衷应该是:私有成员 _year、_month 和 _day 只在内部被管理,外部不应直接访问这些数据,除非通过像 的专用接口。...以上就是关于【C++篇】C++类和对象实践篇——从零带你实现日期类超详细指南的内容啦,各位大佬有什么问题欢迎在评论区指正,或者私信我也是可以的啦,您的支持是我创作的最大动力!❤️

    10710

    《Python基础教程》 读书笔记 第七章 更加抽象(下)

    (实例)访问的变量,用来计算类的成员数量。...就像方法一样,类作用域内的变量也可以被所有实例访问: >>> m1.members 2 >>> m2.members 2 在实例中重绑定members特性: >>>m1.members='Two' >>...>m1.members 'Two' >>>m2.members 2 新numbers值被写到了m1的特性中,屏蔽了类范围内的变量。...这跟函数内的局部和全局变量的行为十分类似。 7.2.5指定超类 子类可以扩展超类的定义,将其他类名写在C1dSS语句后的圆括号内可以指定超类: >>> class Filter: ......继承:一个类可以是一个或者多个类的子类。子类从超类继承所有方法。可以使用多个超类,这个特性可以用来组成功能的正交部分(没有任何联系)。普通的实现方式是使用核心的超类和一个或者多个混合的超类。

    50120

    通过getter和setter方法访问和修改

    是否小于0,直接对域操作则没这种优势 3.可细微划分访问控制:可以只设置域访问器getter,不设置域修改器setter,让用户只能读取,而不能修改。...继承 是一种类的层次模型,从现有的类中通过extends关键字派生新类,现有的类称为父类,新类称为子类。 子类可以从它的父类那里继承方法和实例变量,并且可以重写父类的方法和增加新的方法。...一般将通用的方法放到超类中,具有特殊用途的方法放到子类中。 特点: 不能多重继承。 只能继承非私有的成员变量和方法 当子类成员变量与父类成员变量重名时,子类覆盖父类。...定义为final的类不可继承,定义为final的方法不可以被重写。 多态 指允许不同类的对象对同一消息(即同一个方法的调用)做出响应。...多态的作用:降低类型之间的耦合关系。 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

    98530

    推荐一种超简单的硬件位带bitband操作方法,让变量,寄存器控制,IO访问更便捷,无需用户计算位置

    也就是说1MB空间每个bit都拓展为32bit来访问控制 下面这个图非常具有代表性。 0x20000000地址的字节变量 bit0 映射到0x22000000来控制。...0x20000000地址的字节变量 bit1 映射到0x22000004来控制。 0x20000000地址的字节变量 bit2 映射到0x22000008来控制。...同样也是1MB空间每个bit都拓展为32bit来访问控制 (3)举例,比如访问0x2000 0010地址里面字节变量的bit2 那么实际要访问的就是: bit_word_addr =...案例1:超简单控制RAM空间变量: 定义: typedef struct { uint8_t bit0 : 1; uint8_t bit1 : 1; uint8_t bit2 : 1;...到PIN3 案例3:超方便的寄存器修改: 比如定时器TIM1的CR寄存器: 我们的定义如下: typedef struct { uint16_t CEN : 1; uint16

    79730

    java多态理解和底层实现原理剖析

    我们在编码过程中通常都是面向接口,面向抽象编程,这其实就利用了多态的好处,帮我们屏蔽了多个子类之间的实现差异。...invokespecial指令对于super方法的调用,会动态搜寻当前类的超类,找到离得最近的超类中该方法的实现,因此super方法调用是个例外,对于其他情况而言,都采用的是静态绑定。...1,是一致的: 父类的实例变量优先被存储到子类的实例变量表前部,并且每一个类的实例变量出现顺序和他们在class文件中的出现顺序是一致的。...超类的方法出现在来自子类的方法前,并且方法表中方法指针排序顺序和方法在class文件中出现顺序相同,当然,如果存在子类覆盖父类方法的情况,那么子类覆盖的方法会出现在超类中该方法第一次出现的位置。...---- 接口方法调用为什么不能利用方法表快速定位 当通过接口引用来访问实例方法时,符合引用被解析为直接引,但是直接引用不能保证得到方法表的偏移量,因为无法保证是子类自己实现了接口还是超类实现的接口,那么接口方法在方法表中的出现顺序就无法被确定下来

    89520

    【安全事件】从油气管道公司被勒索,剖析DarkSide类组织对关键信息基础设施的影响及应对措施

    周五,管道沿线出现了中断,但不清楚这是攻击的直接结果,还是该公司主动阻止攻击的举措。 BBC称从多个消息来源证实,是一个名为DarkSide的网络犯罪团伙进行了此次勒索攻击。...DarkSide在攻击活动中的多个特征暴露了其主要成员的可能归属: DarkSide在其制作的勒索信、网页文字等内容中展示的英文带有大量语法错误,这可能说明其组织者来自非英语语系的国家。...3攻击模式 由于DarkSide使用了一种雇佣式的恶意程序分发策略(下述),因此与其相关的攻击事件中,各自的入侵手段表现了一定的差异性。...GandCrab背后的组织将已知的大型木马网络的运营模式带入自己开发的勒索软件当中,通过出售使用权、雇佣传播者等方式实现大规模传播。...系统防火墙,通过ACL等方式,对RDP及SMB服务访问进行加固; 通过Windows组策略配置账户锁定策略,对短时间内连续登陆失败的账户进行锁定; 加强主机账户口令复杂度及修改周期管理,并尽量避免出现通用或规律口令的情况

    69230

    多态易错题

    如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。...当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。...比如④,a2.show(b),a2是一个引用变量,类型为A,则this为a2,b是B的一个实例,于是它到类A里面找show(B obj)方法,没有找到,于是到A的super(超类)找,而A没有超类,因此转到第三优先级...它说:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。...子类不允许出现与父类同名但不同返回值的方法,如果出现了, 编译时会报错 覆盖方法时, 不能使用比父类中被覆盖的方法更严格的访问权限

    62820

    109个实用 Shell 脚本实例,代码清晰一看就懂!

    1.Dos 攻击防范(自动屏蔽攻击IP) 2.Linux 系统发送告警脚本 3.MySQL 数据库备份单循环 4.MySQL 数据库备份多循环 5.Nginx 访问访问日志按天切割 6.Nginx访问日志分析脚本...14.从 test.loq中截取当天的所有gc 信息日志,并统计 gc 时间的平均值和时长最长的时间。...上下滚动查看更多 21.vCenter 客户端 22.获取域名ssl 证书过期时间 23.发送今天的天气预报以及未来的天气超势图 24.SVN 完整备份 25.zabbix 监控用户密码过期 26.构建本地...,并按规定格式记录在日志中 60.计算文档每行出现的数字个数,并计算整个文档的数字总数 61.从FTP服务器下载文件 62.连续输入5个100以内的数字,统计和、最小和最大 63.监测 Nginx 访问日志...SSH 免交互执行命令 70.监控 httpd 的进程数,根据监控情况做相应处理 71.批量修改服务器用户密码 72.iptables 自动屏蔽访问网站频须繁的IP 73.根据web访问日志,封禁请求量异常的

    4K21

    Java继承

    子类可以直接访问父类中的非私有的属性和行为。 –注:父类又称为超类或者基类。子类又称为派生类!...二、关于继承之后的成员变量 1.当成员变量不重名 如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。...如果在子类中出现了同名称的成员变量,则会发生隐藏现象,即子类的成员变量会屏蔽掉父类的同名成员变量。...当子父类中出现了同名的成员变量时或者在子类中需要访问父类中非私有成员变量时,需要使用 super 关键字, 使用格式 super.父类成员变量名 3.当成员变量时非私有时:子类中可以直接访问。...4.当成员变量时私有:子类是不能直接访问的。 那如何访问父类私有变量呢? 在父类中提供公共的getXxx方法和setXxx方法就可以访问父类的私有成员变量了。

    94020

    Java的继承、fengzhua

    2、注意事项 (1)子类可以继承父类的成员方法以及成员变量,包括私有的成员变量但不能直接访问; 子类不可以继承父类的构造方法和私有方法; (2)无论使用何种方式构造子类对象时都会自动调用父类的无参构造方法来初始化从父类中继承下来的成员变量...- 判断父类引用指向的对象是否为目标类型 5、实际意义 多态的实际意义在于屏蔽不同子类的差异性实现通用的编程带来不同的结果。...为了解决上述问题,可以使用static关键字修饰成员变量表达静态的含义,表示将成员变量由对象层级提升到类层级被所有对象共享,与是否创建对象无关。...static关键字还可以修饰成员方法,建议使用类名.的方式访问 2、使用方式 (1)非静态成员方法中既能访问非静态的成员也能访问静态的成员; (成员:成员变量 + 成员方法 静态的成员被所有对象共享...,因此this也可以访问) (2)静态成员方法中只能访问静态成员不能访问非静态成员; (成员:成员变量 + 成员方法 调用静态方法时可能还没有创建对象) (3)只有隶属于类层级被所有对象共享的内容才可以使用

    19810

    Java 继承初探

    Java继承的基础 Java中,被继承的类叫做超类,继承超类的类叫子类。(一个子类亦可以是另一个类的超类) 继承一个类,只需要用关键字 extends 把一个类的定义合并到另一个类中就可以了。...,但是子类不能访问超类中被声明为private的成员。...System.out.println("Weight of mybox2 is " + mybox2.weight) ; System.out.println(); } } 超类的一个引用变量可以被任何从该超类派生的子类的引用赋值...理解是引用变量的类型,而不是引用对象的类型;决定了什么成员可以被访问。 也就是说,当一个子类对象的引用被赋给一个超类引用变量时,你只能访问超类定义的对象的那一部分。...weight,因为在超类中没有赋予Box.plainbox访问的权利 } }

    55310

    Java常量池解析与字符串intern简介

    前面提到,对目标类型的初始化需要其所有超类都必须进行初始化(超接口不是必须的),并且, 由于已经对其超类进行了加载,所以不必再依赖于自该类向Object类的解析顺序,而是从Object类向该类进行初始化...4.CONSTANT_InterfaceMethodRef入口解析 对接口方法的搜索就是从被解析的接口开始,向其超接口递归搜索。...而指向实例变量和实例方法的直接引用是从对象映像的开始到该实例变量或方法表的偏移。...实例变量的组织方式为:从Object类开始到该实例的类型,将类中声明的实例变量按在class文件中出现的顺序依次放在对象映像中。...但对于重写的方法将出现在超类对应的位置(该方法第一次出现的位置)。 但是访问接口方法就不能简单地通过方法表的偏移量来进行访问,而必须搜索对象的类的方法表来找到该方法。

    52820

    JavaScript-设计模式·设计原则和编程技巧

    最小知识原则 最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。...用《设计模式》中的话说就是:接口是对象能响应的请求的集合。 静态类型语言通常设计为可以“向上转型”。当给一个类变量赋值时,这个变量的类型既可以使用这个类本身,也可以使用这个类的超类。...通过向上转型,对象的具体类型被隐藏在“超类型”身后。当对象类型之间的耦合关系被解除之后,这些对象才能在类型检查系统的监视下相互替换使用,这样才能看到对象的多态性。...从过程上来看,“面向接口编程”其实是“面向超类型编程”。当对象的具体类型被隐藏在超类型身后时,这些对象就可以相互替换使用,我们的关注点才能从对象的类型上转移到对象的行为上。...如果两个对象拥有相同的方法,则有很大的可能性它们可以被相互替换使用。 代码重构 模式和重构之间有着一种与生俱来的关系。从某种角度来看,设计模式的目的就是为许多重构行为提供目标。

    42230
    领券