java基础小记_[Java教程]Java基础学习小记

[Java教程]Java基础学习小记

0 2016-10-07 18:00:07

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

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

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

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

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

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

bc91bb04e6e9c61e24c974e4440db8f2.gif

源码:

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gif1 package dome; 2 3 import java.util.ArrayList; 4 5 public class Database { 6 7 private ArrayList listItem = new ArrayList(); 8 9 public void add(Item item) {10 listItem.add(item);11 }12 13 public void list() {14 for(Item item:listItem) {15 item.print();16 }17 }18 19 public static void main(String[] args) {20 Database db = new Database();21 db.add(new CD("黑梦",600,true,"Classic Album","窦唯",10));22 db.add(new DVD("功夫",900,false,"Let's do this!","周星驰"));23 db.add(new CD("Wall",700,false,"Psychedelic Rock","PinkFloyd",15));24 db.list();25 }26 27 }

Database.java

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gif1 package dome; 2 3 public class Item { 4 5 private String title; 6 private int playTime; 7 private boolean gotIt = false; 8 private String comment; 9 10 public Item(String title, int playTime, boolean gotIt, String comment) {11 super();12 this.title = title;13 this.playTime = playTime;14 this.gotIt = gotIt;15 this.comment = comment;16 }17 18 public void print() {19 System.out.print(title+":"+playTime+":"+gotIt+":"+comment);20 }21 22 }

Item.java

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gif1 package dome; 2 3 public class CD extends Item { 4 5 private String artist; 6 private int numofTracks; 7 8 public CD(String title, int playTime, boolean gotIt, String comment, String artist, int numofTracks) { 9 super(title, playTime, gotIt, comment);10 this.artist = artist;11 this.numofTracks = numofTracks;12 }13 14 public void print() {15 System.out.print("CD:");16 super.print();17 System.out.println(":"+artist+":"+numofTracks);18 }19 20 }

CD.java

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gif1 package dome; 2 3 public class DVD extends Item { 4 5 private String director; 6 7 public DVD(String title, int playTime, boolean gotIt, String comment, String director) { 8 super(title, playTime, gotIt, comment); 9 this.director = director;10 }11 12 public void print() {13 System.out.print("DVD:");14 super.print();15 System.out.println(":"+director);16 }17 18 }

DVD.java

运行:

bc91bb04e6e9c61e24c974e4440db8f2.gif

这里有两个概念:

多态变量:在这里可以说是,一个父类下面有两个子类,在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

bc91bb04e6e9c61e24c974e4440db8f2.gif

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

Item.print():

bc91bb04e6e9c61e24c974e4440db8f2.gif

CD.print():

bc91bb04e6e9c61e24c974e4440db8f2.gif

DVD.print():

bc91bb04e6e9c61e24c974e4440db8f2.gif

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

bc91bb04e6e9c61e24c974e4440db8f2.gif

本文网址:http://www.shaoqun.com/a/253263.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JAVA

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值