1.当创建一个导出类的对象时候,该对象包含了一个基类的子对象,用super表示其引用。

2.类构造之前先构造父类。

3.如果父类构造器中带有参数,那么必须在子类构构造器中第一件事就是调用super……

4.

重载:根据同方法名,不同参数列表形式。

重写:同方法名,同参数列表,加了override为重写。

5

. 组合:has-a,直接用其方法实现功能。

继承:is-a,通过这个通用类可以创建新版本的类。

6.向上转型:新类是现有类的一种类型,即子类也是一种类型的父类。因为向基类发送的所有信息同样可以向导出类发送,正如以前提到的那样,方法定义参数用父类,实际传入为子类型。

7.子类可能比基类含有更多的方法,但是它必须至少具备基类中所包含的方法。在向上转型过程中,类接口中唯一可能发生的事情是缺方法,而不是获取方法,所以用子类传入父类要求的类型,仍可以发送消息。这就是编译器允许向上转型的原因。

8.继承使用之前可以自问“我真的需要向上转型吗?”,否则可以用组合代替。

9.final数据:

a.使用场景:

1)一个永不改变的编译时常量。

2)一个在运行时被初始化的值,而你不希望他被改变。

b.对于1)中的编译时常量,必须是一个基本类型数据,并以final表示,定义时必定赋值(ps:因为存在空的final,这里是否可以理解为使用前必须赋值)

c.一个即是static又是final的域,只占一段不能改变的存储空间。

d.当对象引用而不是基本数据类型运用final时,令人迷惑,final使得引用恒定不变,一旦引用被初始化指向一个对象,就无法再把它指向另一个对象,但是对象本身可以被修改。ps:数组也是对象。

e.public static final int VALUE_THREE = 39;(典型常量定义方式)

public:可以被用于包外;

static:强调只有一份。(其实static是不管你new了多少个对象,都是同一个值,而没有static,即使使用了final,不同对象还是不同的;static在转载是初始化,而不是每次创建新对象时都初始化)

final:说明是一个常量。

f.空白final:定义时不赋值而是在构造器中完成赋值,以做到根据不同对象而又不同值,但final域必须在使用前总是被初始化的。

g.final参数:无法再方法中更改参数引用所指向的对象,主要用于向匿名内部类传数据。

10.final方法使用场景:

a.吧方法锁定,以防任何继承类修改它的定义,以确保在继承中使方法行为保持不变并不会被覆盖。

b.效率,但劝阻不适用,让编译器、jvm自己处理。

11.final类:表明你不打算继承该类,而且也不允许别人这样做。因此,final类中所有的方法都隐式的制定为final。

12.初始化和类加载:

每个类的编译都存在于它自己独立的文件中,该文件只在需要使用程序代码时才会被加载。也就是说,类的代码都在第一次使用时候才加载。通常指加载发生于创建类的是一个对象时,但当访问static域或方法时候也会加载,构造器本来也是static方法,尽管static没有显式写出来。

类加载过程

a-试图访问子类的main方法,加载器开始启动并找到class文件。

b-加载器发现有基类,加载基类,以此类推。

c-基类中static初始化,先初始化再调用构造器;以此类推。

d-所有类加载完毕,子类里的基本类型设置为默认值,对象设为null。

e-子类构造器被调用,第一行显示/隐式也会先调用父类构造器,所以也可理解为先调用父类构造器再调用子类构造器。