zoukankan      html  css  js  c++  java
  • 从头认识java-1.5 继承(2)

    接着上一章节,我们来继续介绍继承。

    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

    “是一个”和“像一个”


    我们再看上面的类图,对比之前的动物的类图,这个类图的子类明显多了一些其他的东西。

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


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


    这一章节就到这里,谢谢。

    -----------------------------------

    目录


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    小程序隐藏或自定义 scroll-view滚动条
    小程序携带参数(单个或多个)跳转页面(实例)
    小程序接收from表单数据(实例)
    js返回上一页
    项目部署到线上后台进不去
    微信小程序取消button边框线
    阿里iconfont图库官网网址
    php 发送邮件(实例)
    PHP 数组序列化,转为字符串
    面向对象的设计原则
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896701.html
Copyright © 2011-2022 走看看