java的工作方式
primitive 原始数据类型
每种primitive主数据类型变量有固定的位数(杯子的大小),存放数值的primitive主数据类型有下列6种大小
变量就像是杯子,是一种容器,装载某些事物
reference 引用数据类型
对象 声明、创建、赋值的3个步骤
primitive vs reference
注: 对primitive主数据类型的变量来说,变量值就是多代表的值(如5、-26.7 或 'a'),对reference引用变量来说,变量值是指向堆内存中对象的一个地址
使用java类库
你必须指明程序代码中所使用到的类的完整名称
- 可以帮助组织项目或函数库, 相对于一大堆零散的类,以功能来组织会比较好
- 包可以创造出命名空间,防止包冲突
- 包可以通过限制 同一包之间的类才能相互存取以维护安全性
重载vs重写
重写
重载
两个方法的名称相同,但参数不同, 与继承和多态无关
抽象类
有些类不应该被实例化!
抽象类:- 不可用被实例化,但还是可以使用抽象类来声明为引用类型给多态使用
- 抽象的类除了被继承之外,是没有用途,没有值,没有目的的 抽象方法:
- 没有实体
- 如果你声明了一个抽象方法,就必须将类也标记为抽象的 为什么要有抽象方法?
- 将可继承的方法体放在父类中是个好主意,但有时就是没办法做出给任何子类都有意义的共同程序代码,抽象方法的意义就是就算无法实现处方法的内容,但还是可以定义出一组子类型共同的协议
- 抽象的方法没有内容,它只是为了标记出多态而存在
你必须实现所有的抽象方法
实现抽象的方法就如同重写(覆盖)父类的方法一样
终极对象Object
- 在java中所有类都是从Object这个类继承出来的
- 没有直接继承过其他类的类会隐式的继承Object
Object对象重点方法
Object类的主要作用:- 作为多态,让方法可以应付多种类型的机制
- 作为顶层父类,提供java世界中所有类型都拥有的方法
- 作为多线程的锁
使用Object类型的多态引用是会付出代价的
编译器会根据引用类型来判断有哪些method可以调用,而不是根据Object确实类型
你只有在引用变量的类确实有这个方法时才能调用它
接口
多重继承导致 二义性
接口是我们的救星
接口可以用来解决多重继承的问题又不会产生二义性问题