题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓“早起毁一天”不是没有道理哪,特别对Coders来说,有几天不是加班到夜里。好吧,我承认对于初学Java的我,昨日头脑顿路,Java的继承与多态,看得我是有点小懵逼。其实大致是懂了,不过到了具体应用中,特别是比较复杂的继承和调用关系的时候些许迷路。好了,话不多说,明日再把继承和多态来个总结,今日先对多态来个小记。

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

现在我们要做这么一个媒体库,用来存放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 ArrayList<Item> listItem = new ArrayList<Item>();

     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.java

 package 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.java

 package 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.java

 package 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函数。

Java基础学习小记--多态的更多相关文章

  1. [转帖]java基础学习总结——多态(动态绑定)

    https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态

  2. java基础学习总结——多态(动态绑定)

    一.面向对象最核心的机制——动态绑定,也叫多态

  3. Java基础学习篇---------多态

    一.多态性的理解 1.向上转型:子类为父类对象实例化,调用的一定是子类覆写的方法,他们之间找的是共性 2.向下转型:子类扩充了父类的某些功能,而父类中没有该功能,他们之间找的是特性 案例: Numbe ...

  4. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  5. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  6. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  7. Java基础学习(2)

    Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...

  8. Java基础学习中一些词语和语句的使用

    在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...

  9. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

随机推荐

  1. China Mobile 免流原理

    用户添加包头之类(SSR软件),最后连接上了Server. 这个过程因为修改了数据包(混淆)以及服务器使用移动IP. 服务器得到信息后通过计费系统漏洞137 138端口等再返回给用户. 整个过程最重要 ...

  2. hibernate(五)核心开发接口与对象的三种状态

    本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...

  3. 34988 Happy Reversal(二进制去取反)

    /* 题意:给多个二进制数,对某些数进行按位取反操作! 然后从中找到最大数和最小数,并输出他们的差值! 注意:所有的数都是整数,包括取反之后 思路:一个n为二进制数x,令tmp为n位全1!则 y=tm ...

  4. java中异常注意的细节1

    /* public class Test{ public static void main(String[] args){ int i=0; try{ func();//区别就是该函数抛出的异常被封装 ...

  5. python--基础学习(一)开发环境搭建,体验HelloWorld

    python学习之前 最近想用python写爬虫,由于之前没接触过,所以从零开始,找了技术博文大概了解下基础. 印象比较深的是"python你不去认识它,可能没什么,一旦你认识了它,你就会爱 ...

  6. 基于Metronic的Bootstrap开发框架经验总结(8)--框架功能总体界面介绍

    在前面介绍了一系列的<基于Metronic的Bootstrap开发框架经验总结>的随笔文章,随笔主要是介绍各个知识点的内容,对框架的总体性界面没有很好的阐述,本篇随笔主要介绍这个Boots ...

  7. CSS3的学习--实现瀑布流

    基于CSS3实现瀑布流,使用CSS3的CSS 多栏(Multi-column). 可以到github上下载源码 : https://github.com/CraryPrimitiveMan/water ...

  8. 帮助文档的制作javadoc

    将自己写的工具类Tool的Tool.class文件发送给其他人,其他人只要将该文件设置到classpath路径下,就可以使用该工具类. 但是很遗憾,该类中到底定义了多少个方法,对方却不清楚,因为该类并 ...

  9. QT学习笔记2

    初探信号槽 代码如下: QPushButton *button=new QPushButton("quit"); QObject::connect(button,SIGNAL(cl ...

  10. Moon.Orm 5.0(MQL版)及之前版本的开源计划

    开源综述:步步开源 Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布) Moon.Orm 5.0系列文章 Moon.Orm 5.0性能问题,将发言权交给你! 一.5.0目前的情况,步 ...