第一章:对象导论
Car c=new Car();
//c是对象的引用,new Car()新建一个对象
1.当正在试图开发或理解一个程序设计时,最好的方法之一就是将对象想象为“服务提供者”,程序本身将向用户提供服务,它将调用其它对象提供的服务来实现这一目的。你的目标就是去创建(或者最好是在现有代码库中寻找)能够提供理想的服务来解决问题的一系列对象。
2.向上转型(子类继承父类)
/**
* 基类,父类,超类
* @author Administrator
*
*/
public class Shape {
public void draw(){
System.out.println("画什么图");
}
public void delPic(){
System.out.println("删除什么图");
}
}
/**
* 子类,圆
* @author Administrator
*
*/
public class Circle extends Shape{
@Override
public void draw() {
System.out.println("画圆");
}
@Override
public void delPic() {
System.out.println("删除圆");
}
}
public class Line extends Shape {
@Override
public void draw() {
System.out.println("画一条线");
}
@Override
public void delPic() {
System.out.println("删除一条线");
}
}
public class Test {
public static void main(String[] args) {
Circle circle=new Circle();
Line line=new Line();
new Test().doSomething(circle);
//分析:由于Circle可以被doSomething()看做是Shape,也就是说doSomething()可以发送给Shape的任何消息,Circle都可以接收
new Test().doSomething(line);
/*输出: 删除圆
画圆
删除一条线
画一条线*/
}
public void doSomething(Shape shape){
shape.delPic();
shape.draw();
}
}
1.9 容器
面向对象设计中,处理问题时,存储对象方式:
1.创建另一种对象模型,这种新的对象模型持有对其它对象的引用。
2.用在大多数语言中都有的数组来实现
这种称为容器(也称之为集合,不过java类库以不同的含义使用‘集合’这个术语)的新对象,在任何需要时都可以扩充自己容纳你置于其中的所有东西。开发人员不需要知道要把多少对象置入容器中,只需要创建一个容器对象就好。
好的OOP语言都有一组容器,它们作为开发包的一部分。在java中,具有满足不同需要的各种类型的容器,例如List(存储序列),Map(也被称为关联数组,用来建立对象之间的关联),Set(每种对象类型只持有一个),以及诸如队列,树,堆栈等更多的构件。
不同容器提供了不同类型的接口和行为。它们之中的某种容器提供的解决方案可能比其它容器要灵活的多。不同容器对于某些操作具有不同的效率。如ArrayList和linkList前者查询快,后者插入快。
List list=new ArrayList();开发的程序优化系统性能时改用LinkList那么接口List所带来的抽象,可以把在容器之间进行转换时对代码产生的影响降到最低。
1.9.1参数化类型
javaSE5重大变化之一就是添加了参数化类型,也就是java的范型,一对尖括号,中间包含类型信息。
比如:List<Shape> list=new ArrayList<Shape>();