Java之继承

来源:互联网 发布:淘宝贷款没有了 编辑:程序博客网 时间:2024/06/05 11:08
package database;


public class Item {
//这个变量是private类型,只有同一个名字的类可以访问(其子类都不可以在成员函数中访问他)
private String name;
private int playingtime;
private String comments;
private boolean ison;
//private int t;
//通过系统的自动构造函数(在source中)

public Item(String name, int playingtime, String comments, boolean ison) {
super();
this.name = name;
this.playingtime = playingtime;
this.comments = comments;
this.ison = ison;
}

public void print(){
System.out.print("name:"+name+";"+"+playingtime:"+playingtime+";"+"comments:"+comments+";"+"ison:"+ison+";");
}




public static void main(String[] args) {
// TODO Auto-generated method stub


}


}






package database;
//子类和基类是isa的关系  CD类同时也是item类
public class CD extends Item{
private String artist;
public CD(String name,int playingtime,String comments,boolean ison,String artist){
super(name,playingtime,comments,ison);
this.artist=artist;
}
//相当于c++中的虚函数override
public void print(){
super.print();
System.out.print("artist:"+artist+";");
}
public static void main(String[] args) {
// TODO Auto-generated method stub


}


}






package database;
//通过extends(三单加s)使得DVD成为Item子类
//DVD会得到Item类的所有东西,但是由于访问权限问题并不是所有东西都可以使用 ,比如父类的private对象就只就只有
//父类可以访问,但是如果是protected,那么就是自己可以访问,同一个包内的其他类(相当于friend),子类可以访问
public class DVD extends Item{
//super.表示父类的成员,(比如在子类中有一个和父类同名的成员,由于在子类中会调用离自己近的变量
//所以可以通过super.访问父类的非private变量 )
private String dirtector;//初始化为0
//如果子类中有和父类相同名字的变量,那么父类的该变量会被隐藏(反正就是找对自己最近的变量
//this是表示当前这个对象
//构造时先进行父类的初始化(定义变量,构造函数),在进行自己的初始化(定义变量,构造函数)
public DVD(String name,int playingtime,String comments,boolean ison,String dirtector) {
//可以通过super()函数将参数传给父类让父类构造这一部分
//super等同于参数类型相同的父类构造函数,如果不写super,子类会自动调用不但参数的父类构造函数
super(name,playingtime,comments,ison);
this.dirtector=dirtector;
// TODO Auto-generated constructor stub
}

public void print(){
super.print();
System.out.print("dirtector:"+dirtector+";");
}


public static void main(String[] args) {
// TODO Auto-generated method stub


}


}






package database;


import java.util.ArrayList;


public class DataBase {
ArrayList<Item> List = new ArrayList<Item>();
public void add(Item x){
List.add(x);
}

public Item getIndexOf(int id){
return List.get(id);
}
// 可以通过for-each访问容器类
public void list(){
for(Item k:List){
//只要Item子类中有print成员函数,那么Database就会认为这个子类是DataBase所要求的Item
k.print();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DataBase DB = new DataBase();
//直接新建对象,而不是交给对象管理者
DB.add(new CD("00",00,"00",false,"00"));
DB.add(new DVD("11",11,"11",false,"11"));
DB.list();
}


}

1 0