Java作为面向对象程序设计语言的特点:
对象封装数据,并提供“接口”接收对数据的操作。对象的类型(class)规定了接口的形式。
对象的”接口“规定了对一个特定对象发送那些请求,然而在某些地方一定存在一些代码实现这些请求。这些代码和隐藏起来的数据则是”隐藏的实现“。
设置类边界(三个显式关键字,一个隐式关键字):
组合(组织、包含):在现有类的基础上组织一个新类(现有类作为新类的一个成员对象),通常将现有类设置为”private“。对象的组合具有极大的灵活性,一般要先考虑组合实现,然后再考虑继承。
继承:衍生类具有和基础类相等的数据类型(掌握这种等价关系)。使用继承相当于创建了一个新类,该类不仅有现在的所有成员,还复制了基础类的接口。可向基础类发送的消息都可以发送给衍生类对象。
动态绑定:可将新类型替换为基础类型。如:
void doStuff(Shape s) {
s.erase();
// ...
s.draw();
32
}
//Circle,Triangle,Line继承自Shape
Circle c = new Circle();
Triangle t = new Triangle();
Line l = new Line();
doStuff(c);
doStuff(t);
doStuff(l);
重写和重载:方法头完全一致是重写,方法头中参数有差别是重载。
抽象类:关键字abstract. 不希望实际创建基础类的对象,只是为衍生类提供一个接口。可以实现方法也可以不实现方法。
接口:完全禁止所有函数的定义。
Java中类只能单继承,可以保证父子类同属于一种类型,接口可以多继承。
每种非基本类型的对象都有一个 toString()方法。若编译器本来希望一个String,但却获得某个这样的对象,就会调用这个方法。
Java程序运行时,对象是怎么存储的?内存怎么分配?有五个地方可以存储数据(具体情况--Java虚拟机:内存区域划分):