继承,多态的简单例子
我们想做一个类用于存放CD,DVD等光碟,要应用多态和继承,去除重复性代码,便于以后维护(添加新的格式光碟,如:MP3,MP4),因此我们首先创建一个工程demo,创建database类用于存放光碟数据,创建光碟类ltem,创建CD类,创建DVD类,CD和DVD共同继承ltem的属性和方法(CD、DVD都是光碟),减少重复的属性编写,也便于database类的Listltem容器维护(只需维护光碟类即可)。
通过这个例子我们更好的熟悉Java中的继承和多态特性。
创建database类
package demo;
import java.util.ArrayList;
public class database {
ArrayList<ltem> listltem=new ArrayList<ltem>();//创建ArrayList容器,存储类型为ltem
public void add(ltem item) {//add方法,传入ltem类型,
listltem.add(item);//添加进入listltem容器中
}
public void list() {//list方法 负责遍历容器中所有数据
for(ltem item:listltem) {
item.print();
}
}
public static void main(String[] args) {
database data=new database();//创建database对象
data.add(new CD("起风了",3,false,"买辣椒也用券"));//添加ltem类型对象,添加ltem子类对象CD(匿名对象),CD构造器初始化,多态
data.add(new CD("流量", 3, false,"半阳"));
data.add(new DVD("一出好戏", 125, false,"黄渤"));
data.list();
}
}
创建ltem类
package demo;
public class ltem {
private String title;//标题
private int playtime;//播放时间
private boolean borrow;//是佛外借
public ltem(String title, int playtime, boolean borrow) {//构造函数初始化变量
this.title = title;
this.playtime = playtime;
this.borrow = borrow;
}
public void print() {//print方法 输出数据
System.out.print("标题:"+title+" 时间:"+playtime);
}
}
创建CD类
package demo;
public class CD extends ltem{//子类CD继承父类ltem
private String artist;//艺术家
public CD(String title, int playtime, boolean borrow,String artist) {//构造函数初始化
super(title, playtime, borrow);//super关键字必须放在第一行,调用父类的构造函数,将标题,播放时间,是否外借传入
this.artist=artist;
}
public void print() {//print方法重写父类的print
System.out.print("CD ");
super.print();//super调用父类的print方法
System.out.print(" 艺术家:"+artist);//输出子类独有的属性
System.out.println();
}
}
创建DVD类
package demo;
public class DVD extends ltem{//子类DVD继承父类ltem
private String director;//导演
public DVD(String title, int playtime, boolean borrow,String director) {//构造函数初始化
super(title, playtime, borrow);//super关键字必须放在第一行,调用父类的构造函数,将标题,播放时间,是否外借传入
this.director=director;
}
public void print() {//print方法重写父类的print
System.out.print("DVD ");
super.print();//super调用父类的print方法
System.out.print(" 导演:"+director);//输出子类独有的属性
System.out.println();
}
}
运行结果: