您的位置:首页 > 编程语言 > Java开发

从头认识java-1.5 继承(2)

2015-10-16 15:15 627 查看
接着上一章节,我们来继续介绍继承。
1.子类调用方法时的查找方法的顺序:
我们继续以上一章节的动物代码为例:
package com.ray.ch01;

public class Animal {

private String name;
private long id;
private String location;

public void eat() {
System.out.println("animal is eating");
}

public void sleep() {
}

}

package com.ray.ch01;

public class Bird extends Animal {
@Override
public void eat() {
System.out.println("bird is eating");
}

public static void main(String[] args) {
Animal bird = new Bird();
bird.eat();
}
}


输出:
bird is eating

package com.ray.ch01;

public class Dog extends Animal {
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat();
}
}


输出:animal is eating

我们先看类图:



根据类图就比较清晰,调用方法的顺序:
1)现在实现类里面找,也就是new后面的那个类去找,如果没有,转2
2)到父类去找,一直这样循环的向上一层找,找到为止,不然报错。

2.继承的要点。
(1)子类是extend父类出来的
(2)子类会继承父类public和protected的方法和实例变量,但不会继承private的。
(3)继承下来的方法可以被覆盖,但是实例变量不可以。
(4)通过is-a测试来验证继承的合理性。
(5)is-a关系是单向的,鸟是动物,但是,动物不一定是鸟。
(6)当方法被覆盖,调用的时候先调用重写的方法。
(7)如果x是y的父类,y是z的父类,那么x也是z 的父类。

3.is-a和is-like-a
“是一个”和“像一个”



我们再看上面的类图,对比之前的动物的类图,这个类图的子类明显多了一些其他的东西。
动物的那个类图我们认为是完全替换,在子类里面没有其他的方法,是理想的继承方式,但是,在现实世界当中,经常需要在新的分类里面增加自己特有的方法,这个时候只能说“像一个”,而不是上面的“是一个”,当然,这种也算继承的方式,只不过没有那么绝对的替换,但更加适应现实需求。

总结:这一章节我们讨论了调用子类方法的查找顺序以及继承的关系。

这一章节就到这里,谢谢。
-----------------------------------
目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 继承