此2段代码大量重复
package doim;
import java.util.ArrayList;
public class CD extends Item{
private String title;
private String artist;
private int numofTracks;
private int playingtime;
private boolean gotIt=false;
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) {
// TODO Auto-generated method stub
}
public void print() {
// TODO Auto-generated method stub
System.out.println("CD"+title+":"+artist);
}
}
public class DVD extends Item{
private String title;
private String director;
private int numofTracks;
private int playingtime;
private boolean gotIt=false;
private String comment;
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void print() {
// TODO Auto-generated method stub
System.out.println("DVD"+title+":"+director);
}
public DVD(String title, String director, int numofTracks, int playingtime, String comment) {
super();
this.title = title;
this.director = director;
this.numofTracks = numofTracks;
this.playingtime = playingtime;
this.comment = comment;
}
}
我们可以写一个统领它们的类,方便使用
package doim;
public class Item {
public Item() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void print() {
// TODO Auto-generated method stub
System.out.println("3333");
}
}
上面那个类加上extends Item()便是继承者
主函数就可以简单化
import java.util.ArrayList;
public class Database {
/*private ArrayList<CD> listCD=new ArrayList<CD>();
private ArrayList<DVD> listDVD=new ArrayList<DVD>();*/
private ArrayList<Item> listItem=new ArrayList<Item>();
/*public void add(CD cd) {
listCD.add(cd);
}
public void add(DVD cd) {
listDVD.add(cd);
}*/
public void add(Item item) {
listItem.add(item);
}
public void list() {
/*for(CD cd:listCD) {
cd.print();
}
for(DVD cd:listDVD) {
cd.print();
}*/
for(Item item:listItem) {
item.print();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Database db=new Database();
db.add(new CD("abc","ab",4,60,".."));
db.add(new CD("abe","sd",3,23,"..."));
db.add(new DVD("dsf","sf",3,23,"..."));
db.list();
}
}
注意点:
1:仍然可以插入CD,DVD类型
2:Item类里的print函数被CD和DVD里的替代了,没有执行
3:若CD类里没有print函数,就会用原来继承的
同时CD和DVD的代码还可以更加简化
public class Item {
private String title;
private int playingtime;
private boolean gotIt=false;
private String comment;
public Item(String title, int playingtime, boolean gotIt, String comment) {
super();
this.title = title;
this.playingtime = playingtime;
this.gotIt = gotIt;
this.comment = comment;
}
public Item() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void print() {
// TODO Auto-generated method stub
System.out.println(title);
}
}
通过super调用
public class DVD extends Item{
private String director;
public DVD(String title, String director, int playingtime, String comment) {
super(title,playingtime,false,comment);
this.director = director;
}
public void print() {
// TODO Auto-generated method stub
System.out.println("DVD:");
super.print();
System.out.println(director);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DVD s =new DVD("ds","d",6,"ff");
s.print();
}
}
注意:print里的super调用,不然无法输出title,title在Item里面,可以在Item里面输出title,通过super.print可以调用