#Thinking in Java阅读笔记# 第一章 对象导论

对象具有状态(内部数据)、行为(方法)和标志(在内存中存在一个唯一的地址)。
对象间的发送消息是对某个特定对象的方法的调用请求,然后执行方法中的代码。//Integer.toString()
抽象数据类型(class)描述了具有相同特性(数据元素)和行为的对象的集合。
访问限定:
访问修饰符:public/private/protected/默认,不需要修饰符
public——对所有类可见
private——对本类可见
protected——对本包和所有子类可见
默认——对本包可见
组合:用现有类创建新类。has-a关系
继承:继承现有类的方法和变量,并可以在子类中进行扩展,得到新的变量和方法(创建超类中没有的方法和覆盖超类已有方法)。但是超类变化时子类也会变化。子类即为超类。is-a关系
子类直接继承超类的所有变量和接口而不添加新接口,被称为纯粹替代,是is-a关系。
子类创建了新方法时,是is-like-a关系。
多态:超类的对象变量进行方法调用时可以根据参数的类型以及返回类型动态绑定要实现的具体代码,从而不需要特地指定具体子类,只和超类交互。编译器不知道将被执行的确切代码,只是确保被调用方法的存在,并对参数和返回类型进行检查,被调用的代码直到程序运行时才能确定。
虚拟机是如何知道该调用哪段具体代码的呢?
虚拟机预先为每个具体类创建了方法表,包括所有方法的签名和实际调用的方法(setName(String)->Employee.setName(String))。在超类对象变量调用某方法时,虚拟机提取超类的实际类型的方法表,然后搜索定义了该方法签名的类(根据具体返回类型和参数),最后调用该方法的具体代码。
多态可以被视为向上转型过程,即子类看做超类的过程。
Java是单根继承结构,即每个类只能有一个超类,所有类的超类都是Object类

为什么Java中有多种集合(Collection)?
1.不同集合有不同的接口和外部分为,不同的情况下集合的解决方案不同(如HashSet和HashMap)
2.不同集合对于某些操作有不同的效率(如ArrayList随机访问元素十分方便,但是LinkedList却需要遍历整个链表,十分费时。插入删除操作反之)

如果不知道特定的类型,则向下转型是很危险的。于是出现了泛型,使得集合可以储存所存元素的类型,而不用向上转型为Object。

Java采用了动态内存分配方式。创建新对象需要用new关键字构建对象的动态实例(在堆上创建),Java只能以这种方式创建对象。

猜你喜欢

转载自blog.csdn.net/zhou373986278/article/details/78278999