为了不污染源代码的前提下对代码进行复用, 有两种方式 分别是组合 和 继承

组合

在新类中创建现有类的对象,这种方法叫组合

继承

在现有类的基础上创建新类,照字面上的理解, 采用现有类的形式,有无需在编码时改动其代码, 这种方式叫做继承,
继承是实现oop的基础

final关键字

final数据:

可以final一个常量, 代表一个永远不会改变的编译时的常量, 必须在编译的时候就给它复制 final int 1,

也可以final一个变量, 代表运行时初始化就不会变化的量, static跟final共同修饰一个变量代表他们被修饰的变量只能占有一段不能被更改的空间(static强调只有一个), 这种变量要全部大写,下划线分割

空白final: final Person p;

你必须要保证 空白final的变量 在被使用前就被初始化

final参数

代表参数不能改变

final方法

无法被子类重写, 以前还可以用来提高效率,但是现在不能用了

覆写

覆写只能发生在子类向上转型并调用相同的方法(方法是基类的接口), 如果基类的方法是private,那么它就不是基类接口的一部分, 它只是实现了代码的隐藏, 如果你在子类里创建public或protected关键字修饰的同名方法, 他们与基类的方法并没有联系,只是名字相同而已, 你并没有复写方法,只是在创建新的方法而已, 由于private起到的只是代码隐藏的作用, 可以把它看成类的一部分,但其他的就不需要考虑到它

final类

无法被继承

类的初始化与加载

java的初始化方式跟c c++不同, 因为java中万物皆对象,所有初始化就容易的多, java中所有的编译代码都存在在它独立的编译文件中, 该文件只有在使用程序代码时才会被使用, 一般可以说”类的代码首次被使用时进行加载”, 这通常指的是创建一个类的对象, 或者访问了类的static属性或者方法 , 因为构造器本身也是一个隐式的static方法,因此准确的说 ,一个类当他任意的static成员被访问时, 就会被加载

首次使用时就是static初始化发生时, 所有的static对象跟static代码块都在加载的时候按照文本顺序进行初始化, static变量只会被初始化一次

代码执行顺序

当一个类进行加载时, 编译器会先看它有没有基类, 有基类就会先在家基类,如果基类还有基类则也会加载, 基类加载 ->基类的static加载 -> 本类的static加载 -> 如果本类创建对象了 则基类的构造函数执行->对象中的所有基本类型变量都被置为默认值,对象引用被设为 null —— 这是通过将对象内存设为二进制零值一举生成的。然后对属性赋值,接着会调用基类的构造器(这里要注意一下,按类为维度, 先按声明顺序初始化属性,再调用该类的构造器)->本类的构造函数执行->本类的其他属性进行初始化