现在我们要做这么一个媒体库,用来存放CD和DVD。可以往媒体库里添加CD和DVD,还可以列出来媒体库里所有的CD和DVD。

我们用到了继承的概念:CD是一个对象,DVD也是。两者又有很多相似的地方,比方说都有名字,播放时间,评论,等等,为了以后便于管理和调试,我们做了一个父类叫Item,它下面有两个子类:CD,DVD。

然后我们还需要做一个类(对象)来管理它们,这个对象有一个ArrayList的成员变量当作媒体库,有一个add函数用来添加CD或DVD,还得有个list函数用来列出媒体库里的所有东西。我们给这个类起名Database。

这样我们就要做以下四个java源文件:

源码:package dome;

import java.util.ArrayList;

public class Database {

private ArrayListlistItem = new ArrayList();

public void add(Item item) {

listItem.add(item);

}

public void list() {

for(Item item:listItem) {

item.print();

}

}

public static void main(String[] args) {

Database db = new Database();

db.add(new CD("黑梦",600,true,"Classic Album","窦唯",10));

db.add(new DVD("功夫",900,false,"Let's do this!","周星驰"));

db.add(new CD("Wall",700,false,"Psychedelic Rock","PinkFloyd",15));

db.list();

}

}

Database.javapackage dome;

public class Item {

private String title;

private int playTime;

private boolean gotIt = false;

private String comment;

public Item(String title, int playTime, boolean gotIt, String comment) {

super();

this.title = title;

this.playTime = playTime;

this.gotIt = gotIt;

this.comment = comment;

}

public void print() {

System.out.print(title+":"+playTime+":"+gotIt+":"+comment);

}

}

Item.javapackage dome;

public class CD extends Item {

private String artist;

private int numofTracks;

public CD(String title, int playTime, boolean gotIt, String comment, String artist, int numofTracks) {

super(title, playTime, gotIt, comment);

this.artist = artist;

this.numofTracks = numofTracks;

}

public void print() {

System.out.print("CD:");

super.print();

System.out.println(":"+artist+":"+numofTracks);

}

}

CD.javapackage dome;

public class DVD extends Item {

private String director;

public DVD(String title, int playTime, boolean gotIt, String comment, String director) {

super(title, playTime, gotIt, comment);

this.director = director;

}

public void print() {

System.out.print("DVD:");

super.print();

System.out.println(":"+director);

}

}

DVD.java

运行:

这里有两个概念:

多态变量:在这里可以说是,一个父类下面有两个子类,在Database里第9行:Item item,定义了一个对象变量item,这个item是Item类,这个item还只是一个变量,是一个对象的管理者,但还没有具体要去管的那个对象。在main函数里可以去给item赋一个CD,也可以给他赋DVD,所以这个item变量是要根据程序运行的时候才能知道他要管理的那个对象是什么。这个item就是多态变量。

向上造型:想上造型是指拿一个子类的对象给父类的对象变量,或者说拿一个子类的对象当父类的对象来用,如Database里db.add一样,我们可以拿一个CD或DVD给item这个Item类对象变量。向上造型总是安全的。

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

然后是多态:

在Database运行的过程中,第15行,有句item.print

我们可以看到这是在调用Item里的print函数,不过我们从程序运行结果来看仿佛不是这么回事,运行结果显示明明是调用CD.print();和DVD.print();的结果。

Item.print():

CD.print():

DVD.print():

这就要用多态去解释:首先当子类和父类里有相同名称的函数时,子类里的函数会去覆盖(override)从父类那里继承来的那个同名函数,于是从父类来的那个函数就会隐藏起来不起作用。然后Database第15行里的item会去看它管理的是什么它自己的Item类还是他的子类,如果是它的子类,那么这个print函数就会用它子类那里的print函数。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

java基础学php_Java基础学习相关推荐

  1. python自学需要哪些基础知识-零基础学Python应该学习哪些入门知识及学习步骤安排...

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...

  2. python自学步骤-零基础学Python应该学习哪些入门知识及学习步骤安排

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...

  3. 学python需要什么基础-零基础学Python应该学习哪些入门知识及学习步骤安排

    众所周知,Python以优雅.简洁著称,入行门槛低,可以从事Linux运维.Python Web网站工程师.Python自动化测试.数据分析.人工智能等职位!就目前来看,Python岗位人才缺口高达4 ...

  4. 零基础学HTML5的学习路线完整版

    如今很多学习HTML5开发的同学都是一些零基础或者转行来学习的,对HTML5都不是很了解,所以想进入这一行业那么就得多去了解一下这个行业,只有了解清楚才能更好的开始学习. 第一:基础的重要性 无论做什 ...

  5. 0基础学python-0基础学python 全套教程送你参考

    我0基础学Python可以吗? 我赞成把Python作为入门语言: 为什么选择python Python可以说是编程语言中罕见的既简单又强大的一门语言,python语言简洁,语言优雅,功能强大,使用p ...

  6. 零基础学pythonpdf-零基础学Python(全彩版)

    内容简介 <零基础学 Python>是针对零基础编程学习者研发的 Python 入门教程.从初学者角度出发,通过通俗易懂的语言.流行有趣的实例,详细地介绍了使用 IDLE 及 Python ...

  7. 0基础学python-零基础直接学习Python入门IT合适吗?

    随着大数据与人工智能的崛起,很多零基础想转行学习编程,很多新手想问对于0基础的人,直接学 Python 编程合适吗? 小编只能说非常合适,因为在目前的编程语言中,Python的抽象程度是最高的,是最接 ...

  8. 刚开始接触Java,学完基础语法之后,应该学什么?

    学完Java寄出语法之后,应该学什么?这是很多初学者在入门学习Java的过程当中比较常见的一个问题,在这里我给大家分享一个系统的Java学习路线: 1.JavaSE:Java基础,既然是基础,那肯定是 ...

  9. java应该学的基础东西

    几个重要的基础课程 如果你是学生,或者如果你有充足的时间.我建议你仔细的掌握下面的知识. 我的建议是针对那些希望在IT技术上有所成就的初学者. 同时我还列出了一些书目,这些书应该都还可以在书店买到. ...

最新文章

  1. 视觉进阶 | 用于图像降噪的卷积自编码器
  2. 服务器发送退出状态127,TCP正常建立和关闭的状态变化
  3. 每日 30 秒 ⏱ HTML Cosplay
  4. libxml -- 解析 XML 文档
  5. react部署在node_如何在没有命令行的情况下在3分钟内将React + Node应用程序部署到Heroku
  6. [Vue.js] 模块化 -- 前端模块化
  7. 人人开源项目文档_为什么图对于您的开源项目文档至关重要
  8. linux设备模型深探
  9. AOJ0525 Osenbei【DFS+状态组合】
  10. 论文笔记_SLAM_An Overview of SLAM
  11. ddwrt php,DD-WRT官方支持设备列表_ddwrt
  12. 智能语音概念界定及技术架构
  13. 电脑开启热点手机显示不可上网
  14. CodeIgniter session过期时间问题
  15. Python数学计算工具1、海伦公式计算三角形面积
  16. Spring学记笔记
  17. oracle 11g 新特性之动态绑定变量窥视(一)
  18. chrome 浏览器的快捷键设置
  19. 快速找到你的另一半——相亲小程序
  20. 整理兼职网站资源分享

热门文章

  1. Arena | 用Excel设计的RPG游戏
  2. 软工小队第二次会议 4-23
  3. Centos安装python3并设为默认
  4. 生成子空间的交空间与和空间
  5. UIUC同学Jia-Bin Huang收集的计算机视觉代码合集(ZZ)
  6. linux 游戏下载论坛,LINUX下的各种游戏
  7. tif转成bmp matlab,【转 】将图像转化成avi格式电影(bmp2avi,jpg2avi,tiff2avi等) - [Matlab]...
  8. [转帖]深圳少儿医保如何绑定医院
  9. 阿里云独享虚拟主机和共享虚拟主机区别对比
  10. 知识付费——移动端音视频加密、防盗播实现方案