Java 基础
【一】 继承
1.1 目的
理清对象间关系,避免代码中的重复代码。
1.2 代码:
public class lesson1 {
public static void main(String[] args) {
CD cd = new CD("叶惠美CD","周杰伦",1,2,"CD","叶惠美-JAY-CD");
cd.print();
System.out.println();
DVD dvd = new DVD("叶惠美DVD","周杰伦、方文山",2,4,"DVD","叶惠美-JAY-DVD");
dvd.print();
}
}
abstract class item{
private String title;
private String artist;
private int numofTracks;
private int playingTime;
private String oomment;
public item() {}
public item(String title, String artist, int numofTracks, int playingTime, String oomment) {
this.title = title;
this.artist = artist;
this.numofTracks = numofTracks;
this.playingTime = playingTime;
this.oomment = oomment;
}
public void print() {
System.out.print(toString());
}
@Override
public String toString() {
return "item{" +
"title='" + title + '\'' +
", artist='" + artist + '\'' +
", numofTracks=" + numofTracks +
", playingTime=" + playingTime +
", oomment='" + oomment + '\'' +
'}';
}
}
class CD extends item {
private String cdName;
@Override
public void print() {
super.print();
}
public CD(String title, String artist, int numofTracks, int playingTime, String oomment, String cdName) {
super(title, artist, numofTracks, playingTime, oomment);
this.cdName = cdName;
}
@Override
public String toString() {
return super.toString() + "CD{" +
"cdName='" + cdName + '\'' +
'}';
}
}
class DVD extends item {
private String dvdName;
public DVD(String title, String artist, int numofTracks, int playingTime, String oomment, String dvdName) {
super(title, artist, numofTracks, playingTime, oomment);
this.dvdName = dvdName;
}
@Override
public void print() {
System.out.print(toString());
}
@Override
public String toString() {
return super.toString() + "DVD{" +
"dvdName='" + dvdName + '\'' +
'}';
}
}
【二】 子类与父类关系
关系:
1.当构造子类对象时,首先要确保父类所拥有的成员变量得到恰当的初始化,定义初始化(优先)、构造器
2.当子类的成员变量与父类成员变量名字相同时,父类成员变量’隐形’了。但是当子类调用setXX方法时,会影响到父类变量
【三】 多态变量
1.1 定义
1.Java的对象变量是多态的,它们能保存不止一种类型的对象。
2.它们可以保存的是声明类型的对象,或声明类型的子类的对象
3.当把子类的对象赋给父类的变量的时候,就发生了向上造型
1.2 代码:
【四】 向上造型
1.1 说明
1.子类的对象可以赋值给父类的变量
2.父类的对象不能赋值给子类的变量!
Vechicle v;
Car c = new Car();
v = c; (√)
c = v; (×)
3.可以用造型(只有当v这个变量实际管理的是Car才行)
c = (Car) v;
【五】 多态
1.1 定义
函数调用的绑定
1.当通过对象变量调用函数的时候,调用哪个函数这件事情叫作绑定。
1.1 静态绑定:根据变量的声明类型来决定
1.2 动态绑定:根据变量的动态类型来决定
2.在成员函数中调用其他成员函数也是通过this这个对象变量来调用的
1.2 代码:
//假设 items 里面有2个对象,一个是CD,一个DVD。那么当执行print方法时,他们会各自调用各自的print实现。
public void list(){
for (Item item : items) {
item.print();
// 1. item1: cd.print();
// 2. item2: dvd.print();
}
}
【六】 Object类
1.1 定义
单根结构,所有对象均继承于Object类
toString()
equals()
【七】 封装
说明
增加可扩展性
可以运行的代码!=良好的代码
对代码做维护的时候最能看出代码的质量
如果想要增加一个方向,如down或up
用封装来降低耦合
Room类和Game类都有大量的代码和出口相关
尤其是Game类中大量使用了Room类的成员变量
类和类之间的关系称作耦合
耦合越低越好,保持距离是形成良好代码的关键
1.成员变量 private
2.根据业务,各自对象负责各自的实现。比如,将显示房间方位的方法放入Room对象。Game只负责移动。-解耦方法
【七】 可扩展性
说明
Room中的方向(东西南北)【重复属性】->【用集合封装】
之前北:Room northRoom = new Room();
现在应该是
Map<String,Room> rooms = new HashMap<String,Room>();
rooms.put(“north”,Room);
【八】 框架加数据
说明
命令的解析是否可以脱离if-else
定义一个Handler来处理命令
用Hash表来保存命令和Handler之间的关系
public class Handler{
public void doCmd(String commond){
//doSomething 做业务处理
}
public boolean isBye(){
// 判断具体是哪种handler实现
}
}
public class HandlerGo extends Handler{
}