201明天手贱画出个⋯我也不明了

给她起名吧

题外话:总计了多年的学习心得,不得不说,睡眠是一个学习者的消费品!所谓“早起毁一天”不是从未有过道理哪,特别对Coders来说,有几天不是加班加点到夜间。好吧,我认可对于初学Java的本人,今日头脑顿路,Java的接续与多态,看得自身是有点小懵逼。其实大致是懂了,可是到了切实可行行使中,特别是相比较复杂的后续和调用关系的时候有点迷路。好了,话不多说,明日再把后续和多态来个总括,前天先对多态来个小记。

来自KlNG画师


在评论

现今大家要做这样一个媒体库,用来存放在CD和DVD。可以往媒体库里添加CD和DVD,还是可以够列出来媒体库里所有的CD和DVD。

来自KlNG画师

俺们用到了继续的概念:CD是一个指标,DVD也是。两者又有成百上千相似的地方,比方说都出名字,播放时间,评论,等等,为了将来便于管理和调节,我们做了一个父类叫Item,它上面有七个子类:CD,DVD。

来自KlNG画师

下一场我们还需要做一个类(对象)来管理它们,这些目的有一个ArrayList的积极分子变量当作媒体库,有一个add函数用来添加CD或DVD,还得有个list函数用来列出媒体库里的持有东西。我们给这么些类起名Database。

想自杀

如此这般我们就要做以下六个java源文件:

图片 1

源码:

图片 2图片 3

 1 package dome;
 2 
 3 import java.util.ArrayList;
 4 
 5 public class Database {
 6     
 7     private ArrayList<Item> listItem = new ArrayList<Item>();
 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

图片 4图片 5

 1 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

图片 6图片 7

 1 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

图片 8图片 9

 1 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

运行:

图片 10

此处有六个概念:

多态变量:在这里可以视为,一个父类上面有五个子类,在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

图片 11

大家能够看来这是在调用Item里的print函数,然而我们从程序运行结果来看类似不是这么回事,运行结果显示明明是调用CD.print();和DVD.print();的结果。

Item.print():

图片 12

CD.print():

图片 13

DVD.print():

图片 14

 

那就要用多态去解释:首先当子类和父类里有同样名称的函数时,子类里的函数会去覆盖(override)从父类这里继承来的相当同名函数,于是从父类来的特别函数就会隐藏起来不起效能。然后Database第15行里的item会去看它管理的是何许它和谐的Item类仍然她的子类,假如是它的子类,那么那个print函数就会用它子类这里的print函数。

图片 15

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图