文档章节

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

raylee2015
 raylee2015
发布于 2015/10/21 08:10
字数 581
阅读 1
收藏 0

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

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

“是一个”和“像一个”


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

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


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


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

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

目录


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

本文转载自:http://blog.csdn.net/raylee2007/article/details/49176829

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
Java 程序员的错

编者注:可以喷语言,但不要搞人身攻击! BTW:我也是一名 Java 程序员,哈哈! Java程序员是有问题的。我使用Java编程已经有10多年的历史。同时,我还有过大量的使用其它语言开发的经历,比...

oschina
2014/07/29
7.8K
92
Go 摆脱了 C,又惹上了 Java?

talks.golang.org 前几天放出了 PPT《Go in Go》和 《The State of Go》讲解最近 Go 的开发动态和成果: 随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编) C 已经...

oschina
2015/05/29
41.9K
192
Scala 2.10.0 Milestone 5 发布

Scala 2.10.0 Milestone 5 发布. 这个版本是从当前的开发分支上截取的,修复了很多BUG并做出了一些改进,目前不建议在生产环境使用。但你可以通过该版本提前体验Scala 2.10.0版本的新特性。 ...

mj4738
2012/07/14
504
4
Java中实现多线程的3种方法介绍和比较

一、什么是多线程? 引用网上别人的一段话: 单进程单线程:一个人在一个桌子上吃菜。 单进程多线程:多个人在同一个桌子上一起吃菜。 多进程单线程:多个人每个人在自己的桌子上吃菜。 多线...

小怪聊职场
05/14
0
0
Maven中指定Java的编译版本和源文件编码方式

使用Maven编译Java项目,默认的编译版本是1.5. 参考官网的说明-》https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html source String 2.0 The -source argument for......

孟飞阳
05/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis批量update操作的写法,及批量update报错的问题解决方法

mybatis的批量update操作写法很简单,如下: 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿...

编程SHA
21分钟前
1
0
EOS怎样删除钱包

在使用Eos的keosd钱包软件时,如果要删除EOS中指定名称的钱包,最简单的办法是 直接删除钱包文件,不过在删除钱包之前,需要先停止钱包软件的运行。 学习EOS应用开发要选这个:【EOS智能合约...

汇智网教程
28分钟前
4
0
Java语言快速实现简单MQ消息队列服务

使用 JAVA 语言自己动手来写一个MQ (类似ActiveMQ,RabbitMQ) 主要角色 首先我们必须需要搞明白 MQ (消息队列) 中的三个基本角色 ProducerBrokerConsumer 整体架构如下所示 自定义协议 首...

微笑向暖wx
37分钟前
5
0
ES5和ES6那些你必须知道的事儿

  ES5和ES6那些你必须知道的事儿      ES5新增的东西      一、数组方法      1、forEach      用途:遍历,循环      对于空数组不会执行回调函数      复制代码...

SEOwhywhy
今天
11
0
转:[windows]DOS批处理添加任务计划

[windows]DOS批处理添加任务计划 博客分类: Windows 转自:http://gwmold.blog.163.com/blog/static/1553319892010117113457232/ 自动创建每周运行一次的计划任务 创建计划任务可用at,sch...

SamXIAO
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部