比如我们现在想制作一个CD
CD
title
artist
numofTracks
playingTime
gotIt
comment
首先创建一个类
import java.util.ArrayList;
public class Database{
private ArrayList
listCD = new ArrayList (); }
这时候我们用了CD,需要定义一个CD的类
public class CD{
public static void main(String[] args){
}
}
接下来,
在CD里面定义属性
public class CD{
private String title;
private String artist;
private int numofTracks;
private int playingTime;
private boolean gotIt;
private String comment;
}
再来个构造器
public class CD{ private String title; private String artist; private int numofTracks; private int playingTime; private boolean gotIt; private String comment; public CD(String title,String artist, int numofTracks, int playingTime,String comment){ // super(); this.title = title; this.artist = artist; this.numofTracks = numofTracks; this.playingTime = playingTime; this.comment = comment; } public static void main(String[] args){ } }
当然,接下来就是输入输出了,我们在定义的Database 里面,定义成员函数,输入,输出
import java.util.ArrayList;
public class Database{
private ArrayList
listCD = new ArrayList (); public void add(CD cd){
listCD.add (cd);
}
public void list(){
for( CD cd : listCD){
cd.print();
}
}
}
这里的参数 CD cd ,CD 是构造的参数类型,cd是对象
此时,我们输出,是调用了CD,所以CD类里面需要有print的成员函数
public void print(){
System.out.println(title+":"+artist);
}
然后我们到主函数里面去创建对象调用CD,添加函数
public static void main(String[] args){
Database db = new Database();
db.add(new CD("abc","abc", 4, 60)); //这时候添加的参数是CD构造器里面的参数,我 // 们要进行赋值使用的}
然后输出我们需要的东西,就是
db.list();
输出: abc:abc
这很简单,我们只是把之前的记事本改了一下,以前放的是元素,现在放的是对象,只不过是放参数的时候因为容器里是对象,所以对象需要传入具体数据的话需要创建对象的对象。
对象名.add( new 对象类型(创建对象时构造器里面的内容———对成员初始化之后,调用的构造函数));
db.add(new CD("abc","abc", 4, 60));
第二步:如果我们需要往容器里面再加入一个元素,就是DVD,
那我们接着在Database 里面创建一个,
private ArrayLIist
listCD = new ArrayList (); private ArrayLIist
listDVD = new ArrayList ();
当然我们创建了一个容器,容器里是对象是DVD,所以我们要创建一个DVD
public class DVD{
}
其实DVD和CD蛮像的,所以借用CD,然后做些许修改
public class DVD{
private String title;
private String director;
private int playingTime;
private boolean gotIt = false;
private String comment;
}
这时候如果想要给DVD里面添加数据,就要在调用他的类的成员函数里面创建函数
public void add(DVD dvd){
listDVD.add(dvd);
}
至于调用的是DVD还是CD,会根据函数的重载,看传入的参数的类型,我们是自定义类型
对于列出容器里面的东西
public void list(){
for(CD cd : listCD){
cd.print();
}
for(DVD dvd : listDVD){
dvd.print();
}
}
这个 dvd是for-each 循环。这个listDVD 是存储DVD对象的容器名,对于我们存在listDVD里面的对象,我们需要为它们创建对象,所以我们在传入参数的时候需要new ,来完成对象初始化。
当然,DVD还没有print,需要在 DVD类里面成员变量创建一个DVD,和CD类似,
public void print(){
System.out.println(title +":"+director );
}
这个时候我们在Database 类主函数里面创建对象来对DVD和CD赋值,
public static void main(String[] args){
Database db = new Database();
db.add(new CD("abc","abc",4,60, "..."));
db.add(new DVD("c","c",60, "..."));
db.list();
}
我们会发现DVD报错
此时,我们想把创建的DVD对象传入到容器里面,但是new一个DVD的时候,需要对DVD对象的成员变量赋值,但是DVD成员变量都是private,所以需要调用DVD里面的构造函数,来创建构造器完成初始化,
构造函数:和成员变量一样,只不过是和类名一致,new对象的时候在完成成员变量初始化之后,会被调用。我们用到this
在DVD类里,构造器
public DVD(String title,String director, int playingTime,String comment){
// super();
this.title = title;
this.artist = director;
this.playingTime = playingTime;
this.comment = comment;
}
然后就可以了,对于输出容器里面的对象的话,是我们在调用成员函数的所完成的,修改的话,就是在DVD和CD类的成员函数里面修改,调用的话就是在Database里面,创建成员函数,然后利用for - each 循环,将容器里面的值依次赋予自定义变量
for(DVD dvd : listDVD){
dvd.print(); //DVD类型的引用类型,可以直接调用自己的属性
}
DVD是容器 listDVD 里面的对象的类型,也就是我们创建的DVD这个类,相当于容器里对象的属性;
print输出的是容器里的对象,对象输出需要在DVD里面再建立一个成员变量输出。
讨论:
这个媒体资料库有什么问题?
答: 代码复制赘余,修改工程量大,拓展性差.