一、 类、对象、方法和变量
  1. 类是一批对象的抽象,对象是具体存在的实体。可以把类当做一种抽象的数据类型,使用类来定义的变量成为引用型变量。
  2. 类中包含的三种成员:构造器,属性和方法;各成员之间的定义顺序没有任何影响,各成员之间可以相互调用;构造器是一个类创建对象的根本途径,如果在Java中一个类没有定义,则系统会提供一个默认的无参数的构造器。
  3. 使用new关键字调用类的构造器可以创建该类的对象。类里定义的方法和属性都可以通过类或者对象来调用。
  4. 引用型变量里存放的仅仅是一个引用,它指向实际的对象。引用变量存放在栈中,真正的对象则存放在堆中。Java中的引用相当于C语言中的指针。
  5. this关键字是一个对象的默认引用,它总是指向调用该方法的对象。出现在构造器中,引用该构造器执行初始化的对象;出现在普通方法中,指向调用该方法的对象。
  this可以代表任何对象,且具有不确定性,但它的类型是确定的,它所代表的对象只能是当前类,只有当this所出现的方法被调用时,它所代表的对象才会被确定下来:谁在调用这个方法,this就代表谁。
  静态方法中不能使用this关键字。
  6. 方法不能独立存在,所有的方法都必须在类中定义。使用static声明的方法属于类,否则属于对象。执行方法必须使用类或者对象进行调用。
  7. 方法的参数传递方式只有值传递一种,就是讲实际参数值的副本传入方法内,而参数本身不会受到影响。对于引用类型参数同样采用的值传递。
  8. 同一个类中包含了多个方法名相同但形参列表不同的方法称为方法重载。
  9. 构造器是用于创建类对象并进行初始化的特殊方法,可以在其中进行显式初始化(系统会默认初始化)。 但是对象并非完全由构造器负责创建,当系统开始执行构造器之前,系统已经创建了一个对象,当构造器的执行体执行结束之后,这个对象会作为构造器的返回值被返回并赋给引用类型的变量。
  10. 构造器和普通方法一样可以重载。当一个构造器需要包含另一个构造器时,可以使用this([形参列表])来调用另一个重载构造器。
  11. Java中变量分为成员变量和局部变量。成员变量又分为类变量和实例变量,分别属于类和对象,与其生命周期相同。局部变量分为形参,方法局部变量和代码块局部变量。局部变量除了形参外,其他都需要显式初始化。另外,同名的局部变量会覆盖成员变量,可以使用this关键字避免冲突。

二、 封装
  1. 封装是将对象的状态隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。需要考虑到:一是将对象的属性和实现细节隐藏起来,不允许外部直接访问;二是把方法暴露出来,让方法来操作或访问这些属性。即遵循:把该隐藏的隐藏起来,把该暴露的暴露出来。
  2. 封装需要通过访问控制符来实现。

三、 继承
  1. 继承是一种一般和特殊的关系。子类通过继承,可以获得父类的全部属性和方法。但需要注意的是子类不能获得父类的构造器。
  2. 大部分时候,子类总是以父类为基础,额外增加新的属性和方法。同时,也可以重写(覆盖)父类方法。方法的重写需要方法名,形参列表相同,子类方法的返回值和抛出的已成类型需要小或等于父类方法,子类方法的访问权限需要大于父类方法。另外,覆盖与被覆盖的两个方法类型(类方法还是实例方法)须一致。被覆盖的父类方法可以在子类中通过super(实例方法)或类型(类方法)来调用。
  3. Java程序创建某个类的对象时,系统会隐式创建该类父类的对象。Super指向父类对象。另外,由于子类不会获得父类的构造器,使用super([形参列表])来调用父类的构造器。

四、 多态
  1. 引用变量的编译类型和执行类型不一致的情况下,执行该引用类型的方法实际上是执行在子类中被覆盖的方法。而对于属性则没有这种性质。
  2. Java允许把一个子类对象赋给赋给一个父类引用变量和无须进行任何类型转换。
  3. 使用instanceof运算符用于判断是否可以进行向上转型。