java隐藏父类成员变量_变量的隐藏_Java语言程

变量的隐藏_Java语言程

5.2.2 变量的隐藏

在一个子类继承直接超类(或父类)时,如果直接超类的某个成员变量对于子类而言是不合适的,那该怎么办呢?我们可以在子类中定义一个同名变量,进行变量隐藏。

在子类中定义了一个成员变量,它与直接超类中的某个成员变量同名,从而使直接超类中的那个成员不能被子类直接引用,这称为成员变量的隐藏。

注意:只要子类和直接超类中出现同名变量,而不管它们是否都为实例变量或者类变量,也不管它们的类型是否相同,都称为变量的隐藏。

【例5-3】 在例5-1中,在圆类和直接超类圆柱体类中增加同名变量,实现变量的隐藏。

5c4c0f7cb5e41c2f6b51beb1281c6e47.png

程序运行结果:

bca579a82d96946f57b6aaf3d68ffeb6.png

分析与思考:(1)Circle类定义一个name变量,其直接子类也定义一个同名name变量。这样,在子类中,父类的name变量不能被引用,被隐藏起来了。

(2)当出现变量隐藏时,如果要在子类中直接引用直接超类中被隐藏的变量,可以使用包含关键字super的方法访问表达式,即:

super.变量名

例如在本例的Cylinder子类中使用super.name来引用父类的name变量。

(3)父类的私有变量radius不能被子类继承下来。这样,在子类类型Cylinder的成员变量只有height(子类自己定义的变量)和name(子类自己定义的并隐藏了父类的name变量)。

(4)在一个引用类型的成员方法中只能直接引用该类型具有的成员变量和成员方法。在父类类型Circle的成员方法中只能直接引用radius和name成员变量。在子类类型Cylinder的成员方法中只能直接引用height(子类自己定义的变量)和name(子类自己定义的并隐藏了父类的name变量)成员变量。然而,不能被继承的父类私有成员,可在子类中被间接引用。例如,在子类类型Cylinder的成员方法getArea()中,由于它是从父类继承下来的方法,所以,方法中引用的radius是父类的私有成员变量。进而,在子类的成员方法getVolume()中,通过getArea()方法间接引用父类的私有成员变量radius,计算出圆柱体的体积。

(5)一个引用类型的引用变量只能引用该类型具有的成员变量和成员方法。引用变量obj的类型是Cylinder子类类型,所以,obj.name只能引用子类Cylinder的name,即“cylinder”。若将obj的类型转换为Circle父类类型,即(Circle)obj,那么,((Circle)obj).name就是引用父类Circle的name,即“circle”。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值