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

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

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

3.5K40

C#7.3 新增功能

以下新增功能支持使安全代码获得更好的性能的主题: 无需固定即可访问固定的字段。 可以重新分配 ref 本地变量。 可以使用 stackalloc 数组上的初始值设定项。...01 启用更高效的安全代码 你应能够安全地编写性能与不安全代码一样好的 C# 代码。 安全代码可避免错误类,例如缓冲区溢出、杂散指针和其他内存访问错误。 这些新功能扩展了可验证安全代码的功能。...1.3 stackalloc 数组支持初始值设定项 当你对数组中的元素的值进行初始值设定时,你已能够指定该值: var arr = new int[3] {1, 2, 3}; var arr2 = new...2.4 扩展初始值设定项中的表达式变量 已对在 C# 7.0 中添加的允许 out 变量声明的语法进行了扩展,以包含字段初始值设定项、属性初始值设定项、构造函数初始值设定项和查询子句。...静态上下文(其中隐式 this 实例接收器无法使用)包含未定义 this 的成员的正文(例如,静态成员),以及不能使用 this 的位置(例如,字段初始值设定项和构造函数初始值设定项)。

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

    C#3.0新增功能06 对象和集合初始值设定项

    对象初始值设定项 使用对象初始值设定项,你可以在创建对象时向对象的任何可访问字段或属性分配值,而无需调用后跟赋值语句行的构造函数。...从 C# 6 开始,除了分配字段和属性外,对象初始值设定项还可以设置索引器。...0.0, [1, 1] = 1.0, [1, 2] = 0.0, [2, 0] = 0.0, [2, 1] = 0.0, [2, 2] = 1.0, }; 包含可访问资源库的任何可访问索引器都可以用作对象初始值设定项中的表达式之一...digits2 = new List { 0 + 1, 12 % 3, MakeInt() }; 下面的集合初始值设定项使用对象初始值设定项来初始化上一个示例中定义的 Cat 类的对象。...Add 方法允许,则可以将 null 指定为集合初始值设定项中的一个元素。

    89410

    C#3.0新增功能02 匿名类型

    可通过使用 new 运算符和对象初始值创建匿名类型。 有关对象初始值设定项的详细信息,请参阅对象和集合初始值设定项。...包含其他种类的类成员(如方法或事件)为无效。 用来初始化属性的表达式不能为 null、匿名函数或指针类型。 最常见的方案是用其他类型的属性初始化匿名类型。...在下面的示例中,假定名为 Product的类存在。 类 Product 包括 Color 和 Price 属性,以及你不感兴趣的其他属性。 变量 Product``products 是 对象的集合。...类型名称无法在变量声明中给出,因为只有编译器能访问匿名类型的基础名称。 有关 var 的详细信息,请参阅隐式类型本地变量。...虽然你的应用程序不能访问它,编译器还是提供了每一个匿名类型的名称。 从公共语言运行时的角度来看,匿名类型与任何其他引用类型没有什么不同。

    88620

    C#3.0新增功能09 LINQ 基础08 支持 LINQ 的 C# 功能

    对象和集合初始值设定项 通过对象和集合初始值设定项,初始化对象时无需为对象显式调用构造函数。 初始值设定项通常用在将源数据投影到新数据类型的查询表达式中。...假定一个类名为 Customer,具有公共 Name 和 Phone 属性,可以按下列代码中所示使用对象初始值设定项: var cust = new Customer { Name = "Mike",...,例如 OrderSize,但执行对象初始化后,从查询返回的数据被定型为所需的数据类型;我们选择与我们的类相关的数据。...匿名类型提供一种在查询结果中对一组属性临时分组的简便方法,无需定义单独的命名类型。...使用新的表达式和对象初始值设定项初始化匿名类型,如下所示: select new {name = cust.Name, phone = cust.Phone}; 有关详细信息,请参阅匿名类型。

    1.9K30

    C#6.0 新增功能

    此功能实现用于创建不可变类型的真正语言支持且使用更简洁和方便的自动属性语法。 02 自动属性初始化表达式 自动属性初始值设定项可让你在属性声明中声明自动属性的初始值。...鉴于此行为,建议仔细编写 catch 和 finally 子句,避免引入新的异常。 10 使用索引器初始化关联集合 索引初始值设定项是提高集合初始值设定项与索引用途一致性的两个功能之一。...在早期版本的 C# 中,可以将集合初始值设定项用于序列样式集合,包括在键值对周围添加括号而得到 Dictionary: private Dictionary 集合和其他类型一起使用,在这种情况下,可访问的 Add 方法接受多个参数。...11 集合初始值设定项中的扩展 Add 方法 使集合初始化更容易的另一个功能是对 Add 方法使用扩展方法。 添加此功能的目的是进行 Visual Basic 的奇偶校验。

    1.7K20

    错误处理

    错误可以从表达式中引发,也可以从表达式中处理。 引发错误 引发错误的语法如下: 错误引发表达式: error 表达式 文本值可用作错误值的简写。...对该条目的任何后续访问都将导致引发相同的错误。记录、节或 let 表达式的其他条目不一定会受到影响(除非它们访问先前标记为有错误的条目)。 达到了顶级表达式。...子句也引发错误,那么整个 try 表达式也会引发错误: 复制 try error "A" otherwise error "B" // error with message "B" 记录错误和 let 初始值设定项...以下示例显示了一个记录初始值设定项,其字段A引发错误并由其他两个字段B和访问C。...但是,该错误是由字段初始值设定项引发的,该初始值设定项仅在需要时运行,因此在从 f 返回记录并通过try表达式之后。

    65520

    C#基础知识系列五(构造函数)

    实例构造函数 使用 new 表达式创建某个类的对象时,会使用实例构造函数创建和初始化所有实例成员变量。 要初始化静态类或非静态类中的静态变量,必须定义静态构造函数。...类构造函数可通过初始值设定项来调用基类的构造函数,如下所示: abstract class Shape { public const double pi = Math.PI; protected...Circle 类将表示半径和高度的值传递给 Shape(Circle 从它派生而来)提供的构造函数。...私有构造函数 私有构造函数是一种特殊的实例构造函数。 它通常用在只包含静态成员的类中。 如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。...静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。

    92430

    一篇文章快速搞懂Java虚拟机的栈帧结构

    在已经编译好的Class文件中,方法的Code属性的max_locals数据项中,就确定了该方法所需分配的局部变量表的最大容量。 ...对于两个相邻的共同存放一个64位数据的两个变量槽,虚拟机不允许采用任何方式单独访问其中的某一个,如果遇到进行这种操作的字节码,Java虚拟机就会在类加载的校验阶段中抛出异常。 ...之前的《JVM的类加载机制全面解析》中介绍过,在类加载过程中,类变量有两次赋初始值的过程,一次在准备阶段,赋予系统初始值;另外一次在初始化阶段,赋予代码中定义的初始值。...因此即使没有为类变量赋值也没有关系,类变量仍然具有一个确定的初始值,不会产生歧义。但是局部变量不像类变量有那样的“准备阶段”,如果一个局部变量定义了但没有赋初始值,那它是完全不能使用的。...在方法执行的任何时候,操作数栈的深度都不会超过在max_stacks数据项中设定的最大值。操作数栈的每一个元素都可以是包括long和double在内的任意Java数据类型。

    90620

    详细解析Java虚拟机的栈帧结构

    在已经编译好的Class文件中,方法的Code属性的max_locals数据项中,就确定了该方法所需分配的局部变量表的最大容量。...对于两个相邻的共同存放一个64位数据的两个变量槽,虚拟机不允许采用任何方式单独访问其中的某一个,如果遇到进行这种操作的字节码,Java虚拟机就会在类加载的校验阶段中抛出异常。...之前的《JVM的类加载机制详解》中介绍过,在类加载过程中,类变量有两次赋初始值的过程,一次在准备阶段,赋予系统初始值;另外一次在初始化阶段,赋予代码中定义的初始值。...因此即使没有为类变量赋值也没有关系,类变量仍然具有一个确定的初始值,不会产生歧义。但是局部变量不像类变量有那样的“准备阶段”,如果一个局部变量定义了但没有赋初始值,那它是完全不能使用的。...在方法执行的任何时候,操作数栈的深度都不会超过在max_stacks数据项中设定的最大值。操作数栈的每一个元素都可以是包括long和double在内的任意Java数据类型。

    72120

    C#构造函数的作用_以下程序段的作用是inta

    ; (4)在创建一个类的新对象(使用new关键字)时,系统会自动调用给类的构造函数初始化新对象; C#的类有两种构造函数:实例构造函数和静态构造函数 实例构造函数:负责初始化类中的实例变量,...静态构造函数: (1)用于对静态字段、只读字段等的初始化;        (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的;     (3)...类的静态构造函数在给定应用程序域中至多执行一次,只有创建类的实例或者引用类的任何静态成员才激发,不能带又参数; (4)静态构造函数是不可继承的,而且不能被直接调用;       (5)...如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行.任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项; ...(6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数; 一个类可以同时拥有实例构造函数和静态构造函数,这是惟一可以具有相同参数列表的同名方法共存的情况

    66610

    C#经典面试题及答案 (3)

    (C#语言) 要求:  1.要有联动性,老鼠和主人的行为是被动的。            2.考虑可扩展性,猫的叫声可能引起其他联动效应。...(3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数 (4)静态构造函数是不可继承的,而且不能被直接调用。...任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。...(6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。... System.Globalization.DateTimeFormatInfo.InvariantInfo);      简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用

    76720

    ClangFormat语法1.0

    可能的值: `BS_Attach` (在配置: 附加) 总是将大括号附加到上下文。 `BS_Linux` (在配置: Linux) 像附加,但是休息前大括号对功能、 命名空间和类定义。...`BS_GNU` (在配置: GNU) 总是打破前大括号和对大括号内的控制语句,而不是那些的类、 函数或其他定义中添加额外的缩进级别。...#BreakConstructorInitializersBeforeComma (bool) >总是打破在逗号之前的构造函数初始值设定项和对齐以冒号逗号。...#ColumnLimit (unsigned) >每一行限制字符的长度 #CommentPragmas (std::string) >描述具有特殊的意义,不应分成行或以其他方式改变了评论的正则表达式...#ConstructorInitializerAllOnOneLineOrOnePerLine (bool) >如果在构造函数初始值设定项不适合在一条线,把每个初始值设定项放在自己的行上。

    1.1K30

    C# 中 Struct 和 Class 的区别总结

    结构体中的函数成员不能是抽象的(abstract)或虚的(virtual),重写(override)修饰符只允许重写从 System.ValueType 继承的方法。...结构体中不允许实例属性或字段包含初始值设定项。但是,结构体允许静态属性或字段包含初始值设定项。例如: 结构体可以实现接口。...3 在结构体中,每个变量都包含自己的数据副本(ref 和 out 参数变量除外),对一个变量的操作不会影响另一个变量。...在类中,两个变量可以包含同一对象的引用,对一个变量的任何操作都会影响另一个变量。...它是不可变的(immutable)。 它不会频繁地装箱和拆箱。 在所有其他情形,应该将类型定义为类(class)。

    1.3K20

    【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    (3)table 的默认初始索引一般以 1 开始,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;   (4)table 的变量只是一个地址引用,对 table 的操作不会产生数据影响;...下面我们就用Lua中的table和元表实现一下模拟类中的这些特性,Class.lua 代码如下: 1 --类的声明,这里声明了类名还有属性,并且给出了属性的初始值 2 Class = {x=0,y=...--初始化self,如果没有这句,那么类所建立的对象如果有一个改变,其他对象都会改变 8 setmetatable(self, Class) --将self的元表设定为Class 9...,这个语句相当于其他语言的super ,可以理解为调用父类的构造函数 13 setmetatable(self, SubClass) --将对象自身元表设定为SubClass类 14...接着我们再实例化了子类的对象,然后成功地访问到了父类中的成员变量和方法,并且还可以访问子类中的新增方法,最后我们再执行了重写过父类中虚函数的方法,结果输出 11 1 0,也是正确的。

    3K20

    【面试题精讲】JVM-类的生命周期-连接阶段

    验证:确保被加载的类信息符合 JVM 规范,没有安全问题。 准备:为类的静态变量分配内存,并初始化默认值。 解析:把类中的符号引用转换为直接引用。 2....准备阶段是为了为类的静态变量分配内存,并初始化默认值,这是为了保证类的字段在被使用前已经得到了正确的初始化。...解析阶段是为了将类、接口、字段和方法中的符号引用转换为直接引用,这是为了保证程序能够正确地访问到这些类和成员。 3. JVM 类的生命周期的连接阶段的实现原理?...这些验证确保了类文件的正确性、安全性和合理性。 准备:在准备阶段,JVM 为类的静态变量分配内存,并且设置默认初始值。需要注意的是,这里设置的是默认初始值,而不是程序中设定的初始值。...例如,对于一个类的静态 int 字段,准备阶段会将其初始化为 0,而不是程序中可能设定的其他值。 解析:在解析阶段,JVM 将常量池内的符号引用替换为直接引用。

    16220

    Visual Studio 2017 15.6版本预览,增加新功能

    Visual Studio 2017 15.6 版本预览,这个最新的预览包含新功能,生产力改进和其他增强功能,以解决客户的反馈意见。...本发行版中修复的主要问题 以下是本版本中解决的客户报告问题: 在 Git 中切换分支会打破智能感知。 变量模板中的折叠表达式无法编译。 登录窗口挂起。...修复“Microsoft.VisualStudio.Setup.Utility.StringUtility”的类型初始值设定项引发了一个异常。...此版本的新增功能 Visual C ++ 改进 支持 C ++ 17 保证的复制 elision。 从“添加新项目”对话框中创建 CMake 项目。...我们添加了自定义用于文档字符串的颜色的功能,在类或函数中使用它们时,还可以将正则表达式模式作为对re库调用的一部分进行检测。

    1.8K70

    Java程序设计(Java9版):第4章 简单复合类型

    数组就是一类最简单且非常重要的复合数据类型,数组是具有相同类型变量的顺序存储的集合。几乎所有的程序设计语言都把数组设定为固有的类型,同样Java语言也有数组类型。...数组是引用类型,所以数组名存储在栈内存中,而数组元素存储在堆内存中。 4.1.2 数组操作 (1)数组初始化 数组初始化就是为数组的元素分配内存空间,并为每个数组元素指定初始值。...通过length属性可以安全访问数组,可以避免访问数组出现越界问题。 (3)访问数组元素 与C语言一致,Java数组下标从0开始。一维数组下标范围:0~数组名.length-1。...4.1.3 简单应用 例4-2:前面通过程序Fib.java求解Fibonacci数列过程中,存在一个问题,无法保存这个数列的每一项。...4.1.6 Java8 增强型工具类Arrays 4.2 字符串 4.2.1 字符串变量 字符串是一类非常重要的数据。

    1.1K100

    理解牛顿法

    对于不带约束条件的问题,我们可以将X的初始值设定为任意值,最简单的,可以设置为全0的向量。迭代终止的判定规则和梯度下降法相同,是检查梯度是否接近于0。...在可信域牛顿法的每一步迭代中,有一个迭代序列 ,一个可信域的大小 ,以及一个二次目标函数: 这个式子可以通过泰勒展开得到,忽略二次以上的项,这是对函数下降值: 的近似...其计算公式为: 其中: 因此有: 算法的完整流程为: 1.给定优化变量的初始值 和精度阈值ε,令 , 2.确定搜索方向 3.搜索得到步长...在liblinear中,求解上述问题采用了坐标下降法,这是一种分治法,每次挑选出一部分变量进行优化,将其他变量固定住不动。...如果只挑选出一个变量进行优化,要求解的子问题为: 其中向量e的第j个分量为1,其他分量全为0。上式中最后一步对函数用二阶泰勒展开近似代替。上面子问题的求解采用牛顿法。

    1.6K20

    深入理解Java虚拟机:Java类的加载机制

    .class 文件 由其他文件生成 ---- 二、Java 类的生命周期 类从被加载到 Jvm 内存中开始到卸载出内存为止,生命周期分为7个阶段:加载-验证-准备-解析-初始化-使用-卸载。...静态变量的初值为 Jvm 默认的初值,而不是我们在程序中设定的初值。...5、初始化:为类的静态变量赋予正确的初始值 主要对类变量进行初始化。...在Java中对类变量进行初始值设定有两种方式: 声明类变量是指定初始值; 使用静态代码块为类变量指定初始值 Jvm初始化步骤: 假如这个类还没有被加载和连接,则程序先加载并连接该类 假如该类的直接父类还没有被初始化...访问某个类或接口的静态变量,或者对该静态变量赋值 调用类的静态方法 反射(如 Class.forName(“com.shengsiyuan.Test”) ) 初始化某个类的子类,则其父类也会被初始化

    45720
    领券