走进Java继承的世界

继承

“子类继承父类”,继承的关系意味着子类继承了父类的方法。当提及“类的成员”时,成员的意思就是实例变量和方法。

设计继承

  1. 找出具有共同属性和行为的对象,用继承来防止子类中出现重复的程序代码。
  2. 设计代表共同状态与行为的类
Animal picture food hunger boundaries location makeNoise() eat() sleep() roam() Lion Hippo Tiger Dog Cat Wolf
  1. 决定子类是否需要让某项行为(也就是方法的实现)有特定不同的运作方式,对Animal而言,我们认为eat()和makeNoise()应该由各个子类自行覆盖。
Animal picture food hunger boundaries location makeNoise() eat() sleep() roam() Lion makeNoise() eat() Hippo makeNoise() eat() Tiger makeNoise() eat() Dog makeNoise() eat() Cat makeNoise() eat() Wolf makeNoise() eat()
  1. 通过寻找使用共同行为的子类来找出更多抽象化的机会,Wolf与Dog都属于犬科,Lion、Tiger、Cat都属于猫科,在漫步roam方面每个种类都有一些共同的行为。

  2. 完成类的继承层次

Animal picture food hunger boundaries location makeNoise() eat() sleep() roam() Feline roam() Lion makeNoise() eat() Tiger makeNoise() eat() Cat makeNoise() eat() Canine roam() Dog makeNoise() eat() Wolf makeNoise() eat() Hippo makeNoise() eat()

继承的调用顺序

当你调用对象引用的方法时,你会调用到与该对象类型最接近的方法。换句话说,最低阶的会胜出。

“最低阶”的意思就是在层次树的最下方。

Wolf w = new Wolf();
w.makeNoise(); 会调用Wolf的版本
w.roam(); 会调用Canine的版本
w.eat(); 会调用Wolf的版本
w.sleep(); 会调用Animal的版本

如何判断继承关系

“是一个”,当某物继承另一物时,则满足IS-A的条件。
如果类Y继承类X,且类Y是类Z的父类,则Z IS-A X。

如何在子类中引用父类的方法再加上额外的行为

可以在父类中设计出所有子类都适用的功能实现。让子类可以不用完全覆盖掉父类的功能,只是再加上额外的行为。可以通过super这个关键词来取用父类。

public void roam() {
	super.roam();
	// my own roam stuff
}
该方法会先执行super版的roam(),然后再执行sub版自定义的行为或功能。

要点

  • 子类是extends父类出来的
  • 子类会继承父类所有public类型的实例变量和方法,但不会继承父类所有private类型的变量和方法
  • 继承下来的方法可以被覆盖掉,但实例变量不能被覆盖掉
  • 使用IS-A测试来验证继承结构的合理性
  • IS-A关系是单方面的,河马是动物,但动物不一定是河马
  • 当某个方法在子类中被覆盖过,调用这个方法时会调用到覆盖过的版本
  • 如果Y是extends类X,且类Y是类Z的父类,则Z IS-A X。

继承的意义

  • 避免了重复的程序代码
  • 定义出共同的协议

对象声明、创建与赋值的3个步骤

  1. 声明一个引用变量:Dog myDog = new Dog();
    要求Java虚拟机分配空间给引用变量,并将此变量命名为myDog。此饮用将永远被固定为Dog类型。
  2. 创建对象,引用类型 Dog myDog = new Dog();
    要求Java虚拟机分配堆空间给新建立的Dog对象。
    运用多态时,引用类型可以是实际对象类型的父类。
  3. 连接对象和引用 Dog myDog = new Dog();
    将新的Dog赋值给myDog这个饮用变量。换言之就是设定遥控器。

子类覆盖父类方法的规则

  1. 参数必须要一样,且返回类型必须要兼容
  2. 不能降低方法的存取权限

方法的重载

重载与多态毫无关系,重载的方法与覆盖方法不同。

  1. 重载的方法,返回类型可以不同,主要使用不同的参数即可
  2. 不能只改变返回类型
  3. 可以更改存取权限
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值