栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

具有实例变量的多态[重复]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

具有实例变量的多态[重复]

Java中的字段没有多态性。但是,有继承。有效完成的工作是在Rectangle类中创建两个名称相同的字段。该字段的名称实际上是:

public class Rectangle {    public int Shape.x;    public int Rectangle.x;}

上面的代码并不代表有效的Java,它只是说明如何在类中定义字段的范围

在Rectangle类的整个范围内,同名的超类字段被 隐藏
。因此,无论何时在类中引用简单名称

x
或范围名称
this.x
,都将引用中定义的字段
Rectangle
。实际上,您还可以使用作用域名称来访问超类字段
super.x

现在,从类外部,正在访问其字段的规则略有不同。范围将由引用该字段的类的 编译 时间类型确定。因此,在您的代码中:

Shape s = new Shape();Rectangle r = new Rectangle();s = r;System.out.println(s.x);

输出是

0
因为的编译时间类型
s
Shape
(not
Rectangle
)。当您这样做时,您可以观察到此行为的变化:

Shape s = new Shape();Rectangle r = new Rectangle();s = r;System.out.println(((Rectangle)s).x);

快点!现在的输出是

1
,因为编译器看到您已将域访问范围限定为
Rectangle

浓缩可见性规则:

您可以在JLS的8.3.3.2节中阅读有关隐藏实例变量的更多信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595292.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号