第一章 对象导论
oop(Object-oriented Programming)面向对象程序设计
1.1 抽象过程
万物皆为对象、程序是对象的集合、每个对象都有自己的由其他对象所构成的存储(对象中有对象)、每个对象都拥有其类型。即对象具有状态、行为、标识。每个对象在内存中都有一个唯一的标识。
1.2 每个对象都有一个接口(这个接口好像跟我之前理解的interface 有点出入在后期学习中需要注意一下)
所有的对象都是唯一的,但同时也是具有相同的特性和行为的对象所归属的类的一部分。
1.3每个对象都提供服务
高内聚是软件设计的基本质量要求之一。每个睇相都可以很好的完成一项任务,但他并不试图做更多的事情。
1.4被隐藏的具体实现
访问控制的原因:让客户端程序员(使用那些数据类型的程序员)无法触及他们不应该触及的部分。允许库设计者(创建数据类型的程序员)可以搞癌变内部的工作方式而不用担心会影响到客户端程序员。
访问修饰符: public、private、protected、默认
public:所有类。
private: 本类
默认: 本包
protected:书上说与private作用相当,差别仅在继承的类可以访问protected成员,但不能访问private成员。
以我目前的理解protected本包的其他类也是可以访问的,可能书后面会介绍。
1.5 复用的具体实现
使用现有的类合成心的类被称为组合。如果组合是动态发生的就被称为聚合。组合常被视为拥有关系。就像“汽车拥有引擎”。
1.6 继承
一个父类包含其是哟有子类所共享的特性。
继承并不是玩你呢个的,当父类发生变动的时候,他的子类也会反映出这些变动。
两种方法使父类与子类产生差异:添加新方法,重写(改变现有父类的方法也也叫做覆盖 overriding)。
1.6.1 “是一个” 与像是一个的关系
如果子类只重写父类的方法,这就以为这子类和父类是完全相同的类型。叫做纯粹替代,这是一种理想的处理继承的方式。一个圆形就是一个集合图形
有时必须在子类中添加新的接口元素(这里这个接口元素就是添加新方法吗?为什么是接口元素呢)。这样父类是无法访问新添加的方法了。之前遇到过类似的问题还困惑过
public class Animal {
}
public class Cat extends Animal{
public void say(){
System.out.println("aaaaa");
}
}
public void say(){
System.out.println("aaaaa");
}
}
public class TestE {
public static void main(String[] args) {
Animal a= new Cat();
}
}
public static void main(String[] args) {
Animal a= new Cat();
}
}
a.say 是访问不到的。原因应该就是上面所说的父类是访问不到子类的新方法的。但是 如果在animal中添加的say方法,a.say调用的还是cat中的方法。这个动物类中并没有叫这个行为,而猫中有,就可以理解为猫像是一个动物。如果动物中加上叫这个行为,那又成了是一个的关系。
1.7 伴随多态的可互换对象
通过导出新的子类型而轻松扩展设计的能力是对改动进行封装的基本方式之一。
面向对象程序设计语言使用了后期绑定的概念。编译器确保被调用方法的存在,并对调用参数和返回值进行类型检查(无法提供此类保证的语言被称为弱类型语言 javascript),但是并不知道将被执行的确切地址。
把子类看作是他父类的过程称为向上转型。
1.8 单根继承结构
java中 都是object类型。单根继承结构使垃圾回收的实现变得容易的多。
1.9 容器
运行时才知道需要多少空间来创建一些对象。
List(用来存储序列) Map(用来建立对象之间的关联)Set(每种对象类型只持有一个)。常用list map用来保存键值对 set去重的时候用(目前个人理解)
ArrayList与LinkedList的区别 arraylist 查找快,linkedlist插入删除快。
1.9.1参数化类型
下转为更具体的类型时(向下转型)几乎是不安全的。除非你下转时确定所要处理的数据类型。参数化类型(范型)定义存储类型 ArrayList<Shape>
1.10 对象创建和生命期
java完全采用了动态内存分配方式,创建用new。java采用的垃圾回收机制可以自动发现对象何时不再被使用,并销毁他。
1.11异常处理:处理错误
对于健壮的理解,尽可能的考虑到出现的异常,并提前处理
异常处理不是面向对象的特征
1.12 并发编程
隐患(共享资源) 必须使用期间锁定,完成任务释放资源锁。
1.13 java 与Internet
介绍了一下插件,脚本语言什么的。