1.创建一个数据库,
//朴素版本
import java.util.ArrayList;
public class database {
private ArrayList<CD> liCD=new ArrayList<CD>();
private ArrayList<DVD> liDVD=new ArrayList<DVD>();
public void add(CD cd) {//增加函数
liCD.add(cd);
}
public void add(DVD dvd) {//增加函数和上面的add同名,触发重载,自动匹配相应的add
liDVD.add(dvd);
}
public void list() {//输出函数
for(CD cd:liCD) {//遍历liCD这个ArrayList
cd.print();//这个是用调用CD这个类里的输出函数
}
for(DVD dvd:liDVD) {
dvd.print();
}
}
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
database hhh = new database();//创建一个database让hhh去管理他
hhh.add(new CD("abc","abc",4,60,"..."));//创建一个cd加入到database里面
hhh.add(new CD("abcc","abcc",5,66,".3."));//创建一个cd加入到database里面
hhh.add(new DVD("XXX","aaa",66,".3."));//创建一个dvd加入到database里面
hhh.list();
}
}
public class CD {
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 {
private String title;
private String director;
private int playingtime;
private boolean gotit=false;
private String comment;
public DVD(String title, String director, int playingtime, String comment) {//构造器
super();
this.title = title;
this.director = director;
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("DVD "+title+":"+director);
}
}
他们之间的关系大概是是这样的
2.继承
//部分优化版本
import java.util.ArrayList;
public class database {
//private ArrayList<CD> liCD=new ArrayList<CD>();
//private ArrayList<DVD> liDVD=new ArrayList<DVD>();
private ArrayList<item> iitem=new ArrayList<item>();
// public void add(CD cd) {//增加函数
// liCD.add(cd);
// }
// public void add(DVD dvd) {//增加函数和上面的add同名,触发重载,自动匹配相应的add
// liDVD.add(dvd);
// }
public void add(item iiitem) {
iitem.add(iiitem);//这个arraylist自带的add
}
public void list() {//输出函数
// for(CD cd:liCD) {//遍历liCD这个ArrayList
// cd.print();//这个是用调用CD这个类里的输出函数
// }
// for(DVD dvd:liDVD) {
// dvd.print();
// }
for(item iiitem:iitem) {
iiitem.print();//调用的是item这个类里面的函数
}
}
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
database hhh = new database();//创建一个database让hhh去管理他
hhh.add(new CD("abc","abc",4,60,"..."));//创建一个cd加入到database里面
hhh.add(new CD("abcc","abcc",5,66,".3."));//创建一个cd加入到database里面
hhh.add(new DVD("XXX","aaa",66,".3."));//创建一个dvd加入到database里面
hhh.list();
}
}
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 playingtime;
private boolean gotit=false;
private String comment;
public DVD(String title, String director, int playingtime, String comment) {//构造器
super();
this.title = title;
this.director = director;
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("DVD "+title+":"+director);
}
}
public class item {
public void print() {
// TODO Auto-generated method stub
//System.out.println("item");
}
}
3.继承
//完全优化版本
import java.util.ArrayList;
public class database {
//private ArrayList<CD> liCD=new ArrayList<CD>();
//private ArrayList<DVD> liDVD=new ArrayList<DVD>();
private ArrayList<item> iitem=new ArrayList<item>();
// public void add(CD cd) {//增加函数
// liCD.add(cd);
// }
// public void add(DVD dvd) {//增加函数和上面的add同名,触发重载,自动匹配相应的add
// liDVD.add(dvd);
// }
public void add(item iiitem) {
iitem.add(iiitem);//这个arraylist自带的add
}
public void list() {//输出函数
// for(CD cd:liCD) {//遍历liCD这个ArrayList
// cd.print();//这个是用调用CD这个类里的输出函数
// }
// for(DVD dvd:liDVD) {
// dvd.print();
// }
for(item iiitem:iitem) {
iiitem.print();//调用的是item这个类里面的函数
}
}
public static void main(String[] args) {//主方法
// TODO Auto-generated method stub
database hhh = new database();//创建一个database让hhh去管理他
hhh.add(new CD("abc","abc",4,60,"..."));//创建一个cd加入到database里面
hhh.add(new CD("abcc","abcc",5,66,".3."));//创建一个cd加入到database里面
hhh.add(new DVD("XXX","aaa",66,".3."));//创建一个dvd加入到database里面
hhh.list();
}
}
public class CD extends item{
private String artist;
private int numoftracks;
public CD(String title, String artist, int numoftracks, int playingtime,String comment) {//初始化
super(title,playingtime,comment);
//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.print("CD:");
super.print();
System.out.println(artist);
}
}
public class DVD extends item{
private String director;
public DVD(String title, String director, int playingtime, String comment) {//构造器
super(title,playingtime,comment);
setTitle("b");//测试作用
this.director = director;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public void print() {
// TODO Auto-generated method stub
System.out.print("DVD:");
super.print();
System.out.println(director);
}
}
public class item {
private String title;
private int playingtime;
private boolean gotit=false;
private String comment;
public item() {
}
public item(String title, int playingtime, String comment) {
super();
this.title = title;
this.playingtime = playingtime;
this.comment = comment;
}
public void setTitle(String title) {//测试作用
this.title=title;
}
public void print() {
// TODO Auto-generated method stub
}
}
如果子类和父类出现同名的成员变量,在子类的函数里面所指的这个变量就是子类自己的,在父类的函数里面所指的这个变量就是父类自己的
4.多态变量
java的每一个对象变量都有两个类型,一个是声明类型,一个是动态类型,有的时候一致,有的时候可能不一致,声明类型就是你代码写的那个东西,动态类型是代码跑起时的那个对象。
5.向上造型
把一个类型的对象赋给另一个类型的变量叫做造型。
6.多态
7.object类
8.创建一个新的媒体类型
再有item父类的情况下 创建一个新的媒体类型就显得很重要。
可拓展型与可维护型?
9.城堡游戏
//朴素版本
package agame;
import java.util.*;
public class castlegame {
private Room currentRoom;
public castlegame()
{
creatRooms();
}
private void creatRooms()
{
Room outside, lobby,pub,study,bedroom;
// 制造房间
outside = new Room("城堡外");
lobby = new Room("大堂");
pub = new Room("小酒吧");
study = new Room("书房");
bedroom = new Room("卧室");
// 初始化房间的出口
outside.setExits(null,lobby,study,pub);
lobby.setExits(null,null,null,outside);
pub.setExits(outside,bedroom,null,null);
bedroom.setExits(null,null,null,study);
currentRoom = outside; //从城堡门外开始
}
private void printWelcome()
{
System.out.println();
System.out.println("欢迎来到城堡!");
System.out.println("这是一个超级无聊的游戏。");
System.out.println("如果需要帮助,请输入'help'");
System.out.println();
System.out.println("欢迎来到城堡");
System.out.println("现在你在:" + currentRoom);
System.out.println("出口有:");
if(currentRoom.northExit !=null)
System.out.print("north");
if(currentRoom.eastExit !=null)
System.out.print("east");
if(currentRoom.southExit !=null)
System.out.print("south");
if(currentRoom.westExit !=null)
System.out.print("west");
System.out.println();//打印一个空格
}
// 以下为用户命令
private void printHelp()
{
System.out.println("迷路了吗?你可以做的命令有:go bye help");
System.out.println("如:\tgo east");
}
private void goRoom(String direction)
{
Room nextRoom = null;
if(direction.equals("north")){
nextRoom = currentRoom.northExit;
}
if(direction.equals("east")){
nextRoom = currentRoom.eastExit;
}
if(direction.equals("south")){
nextRoom = currentRoom.southExit;
}
if(direction.equals("west")){
nextRoom = currentRoom.westExit;
}
if(nextRoom == null){
System.out.println("那里没有门!");
}
else{
currentRoom = nextRoom;
System.out.println("你在"+ currentRoom);
System.out.println("出口有:");
if(currentRoom.northExit != null)
System.out.println("norh");
if(currentRoom.eastExit != null)
System.out.println("east");
if(currentRoom.southExit != null)
System.out.println("south");
if(currentRoom.westExit != null)
System.out.println("west");
System.out.println();
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
castlegame game = new castlegame();
game.printWelcome();
while (true){
String line = in.nextLine();
String[] words = line.split(" ");
if ( words[0].equals("help")){
game.printHelp();
}else if ( words[0].equals("go")){
game.goRoom(words[1]);
}else if ( words[0].equals("bye")){
break;
}
}
System.out.println("感谢您的光临。再见!");
in.close();
}
}
package agame;
public class Room {
public String description;
public Room northExit;
public Room southExit;
public Room eastExit;
public Room westExit;
public Room(String description)//重载
{
this.description = description;
}
public void setExits(Room north,Room east,Room south,Room west)
{
if(north != null)
northExit = north;
if(east != null)
eastExit = east;
if(south != null)
southExit = east;
if(west != null)
westExit = west;
}
@Override
public String toString()
{
return description;
}
public void southExit(Object object, Room lobby, Room study, Room pub) {
// TODO Auto-generated method stub
}
}
10.封装
初级优化版本
package agame;
import java.util.*;
public class castlegame {
private Room currentRoom;
public castlegame()
{
creatRooms();
}
private void creatRooms()
{
Room outside, lobby,pub,study,bedroom;
// 制造房间
outside = new Room("城堡外");
lobby = new Room("大堂");
pub = new Room("小酒吧");
study = new Room("书房");
bedroom = new Room("卧室");
// 初始化房间的出口
outside.setExits(null,lobby,study,pub);
lobby.setExits(null,null,null,outside);
pub.setExits(outside,bedroom,null,null);
bedroom.setExits(null,null,null,study);
currentRoom = outside; //从城堡门外开始
}
private void printWelcome()
{
System.out.println();
System.out.println("欢迎来到城堡!");
System.out.println("这是一个超级无聊的游戏。");
System.out.println("如果需要帮助,请输入'help'");
System.out.println();
showprompt();
}
// 以下为用户命令
private void printHelp()
{
System.out.println("迷路了吗?你可以做的命令有:go bye help");
System.out.println("如:go east");
}
private void goRoom(String direction)
{
Room nextRoom = currentRoom.getexit(direction);
if(nextRoom == null){
System.out.println("那里没有门!");
}
else{
currentRoom = nextRoom;
showprompt() ;
}
}
public void showprompt() {
System.out.println("你在"+ currentRoom);
System.out.println("出口有:");
System.out.print(currentRoom.getexitdesc());;
System.out.println();
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
castlegame game = new castlegame();
game.printWelcome();
while (true){
String line = in.nextLine();
String[] words = line.split(" ");
if ( words[0].equals("help")){
game.printHelp();
}else if ( words[0].equals("go")){
game.goRoom(words[1]);
}else if ( words[0].equals("bye")){
break;
}
}
System.out.println("感谢您的光临。再见!");
in.close();
}
}
package agame;
public class Room {
private String description;
private Room northExit;
private Room southExit;
private Room eastExit;
private Room westExit;
public Room(String description)
{
this.description = description;
}
public void setExits(Room north,Room east,Room south,Room west)
{
if(north != null)
northExit = north;
if(east != null)
eastExit = east;
if(south != null)
southExit = east;
if(west != null)
westExit = west;
}
@Override
public String toString()
{
return description;
}
public String getexitdesc() {
StringBuffer sb=new StringBuffer();//如果用String类型的变量开销会很大
if(northExit!=null) {
sb.append("north");
}
if(eastExit!=null) {
sb.append("east");
}
if(westExit!=null) {
sb.append("west");
}
if(southExit!=null) {
sb.append("south");
}
return sb.toString();
}
public Room getexit(String direction) {
Room ret=null;
if(direction.equals("north")){
ret= northExit;
}
if(direction.equals("east")){
ret =eastExit;
}
if(direction.equals("south")){
ret= southExit;
}
if(direction.equals("west")){
ret = westExit;
}
return ret;
}
public void southExit(Object object, Room lobby, Room study, Room pub) {
// TODO Auto-generated method stub
}
}
11.可扩展性
进阶优化版本
package agame;
import java.util.*;
public class castlegame {
private Room currentRoom;
public castlegame()
{
creatRooms();
}
private void creatRooms()
{
Room outside, lobby,pub,study,bedroom;
// 制造房间
outside = new Room("城堡外");
lobby = new Room("大堂");
pub = new Room("小酒吧");
study = new Room("书房");
bedroom = new Room("卧室");
// 初始化房间的出口
pub.setExits("east", lobby);
lobby.setExits("south" ,study);
lobby.setExits("west" ,pub);
lobby.setExits("east" ,bedroom);
study.setExits("north", lobby);
study.setExits("east", bedroom);
bedroom.setExits("west", study);
bedroom.setExits("west",lobby);
outside.setExits("west",lobby);
outside.setExits("south",study);
outside.setExits("east",pub);
currentRoom = outside; //从城堡门外开始
}
private void printWelcome()
{
System.out.println();
System.out.println("欢迎来到城堡!");
System.out.println("这是一个超级无聊的游戏。");
System.out.println("如果需要帮助,请输入'help'");
System.out.println();
showprompt();
}
// 以下为用户命令
private void printHelp()
{
System.out.println("迷路了吗?你可以做的命令有:go bye help");
System.out.println("如:go east");
}
private void goRoom(String direction)
{
Room nextRoom = currentRoom.getexit(direction);
if(nextRoom == null){
System.out.println("那里没有门!");
}
else{
currentRoom = nextRoom;
showprompt() ;
}
}
public void showprompt() {
System.out.println("你在"+ currentRoom);
System.out.println("出口有:");
System.out.print(currentRoom.getexitdesc());;
System.out.println();
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
castlegame game = new castlegame();
game.printWelcome();
while (true){
String line = in.nextLine();
String[] words = line.split(" ");
if ( words[0].equals("help")){
game.printHelp();
}else if ( words[0].equals("go")){
game.goRoom(words[1]);
}else if ( words[0].equals("bye")){
break;
}
}
System.out.println("感谢您的光临。再见!");
in.close();
}
}
package agame;
import java.util.HashMap;
public class Room {
private String description;
private HashMap<String,Room> exits=new HashMap<String,Room>();
public Room(String description)
{
this.description = description;
}
public void setExits(String dir,Room room) {
exits.put(dir, room);
}
@Override
public String toString()
{
return description;
}
public String getexitdesc() {
StringBuffer sb=new StringBuffer();//如果用String类型的变量开销会很大
for(String dir:exits.keySet()) {
sb.append(dir);
sb.append(' ');
}
return sb.toString();
}
public Room getexit(String direction) {
return exits.get(direction);
}
public void southExit(Object object, Room lobby, Room study, Room pub) {
// TODO Auto-generated method stub
}
}
12.框架加数据
这一集是P82先跳了吧,是城堡游戏的最后一集了,恶心到不行…