深入了解——类的继承性

1. 类的层次关系

明·徐应秋《玉芝堂谈荟·龙生九子》:“龙生九子不成龙,各有所好。”

这句话很好的反映了父类与子类的关系,子类如果仅仅实现了继承,那就没有存在的必要,通常需要对子类进行扩展,添加新的属性和方法,使得子类比父类大,更具有特殊性。

父类更像是一个模板,虽然子类在创建的时候继承了父类的所有状态属性和方法(以public为例),但是子类可以为了自己的目的去有选择性的隐藏与改变,即取其精华去其糟粕,为我所用。

声明子类的方式:
[修饰词] class 子类名 extends 父类名

Java类的层次结构:
之前已经讲过,最顶端的类是 Object,它在java.lang中定义,是所有类的始祖,所有类可以没有子类,但一定有父类。

2. 成员变量 <继承与隐藏>

继承略。

成员变量的隐藏
即子类重新定义了父类中的同名变量,如子类LIne 重新定义了 x 为 x1, y 为 y1 , 隐藏了父类 Point 中的两个成员变量 x 和 y 。子类执行自己的方法是,操作的是子类的变量,子类执行父类的方法是,操作的是父类的变量。在子类中要特别注意成员变量的命名,防止无意中隐藏了父类的关键成员变量,这有可能给子类使用变量带来麻烦。

3. 成员方法 <继承与覆盖>

如果子类的方法与父类的方法同名,则不会继承父类的方法而用子类的方法,此时称子类的方法覆盖了父类的方法,简称为方法覆盖(override)。方法覆盖为子类提供了修改父类成员方法的能力。

方法覆盖注意问题:

  • 用来覆盖的子类方法应和被覆盖的父类方法同名。同返回值类型、相同参数个数和参数类型。
  • 可以部分覆盖一个方法。部分覆盖是在原方法的基础上添加新的功能,即在子类的覆盖方法中添加一条语句:super.原父类方法名,然后加入其他语句。
  • 不能覆盖父类中的 final 方法,因为涉及这类方法的母的就是为了防止覆盖。
  • 不能覆盖父类中的 static 方法,但可以隐藏这类方法,可在子类中声明同名的静态方法来隐藏父类中的静态方法。
  • 子类必须覆盖父类中的抽象方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值