1. 多态:父类型的引用可以指向子对象。

  2. Parent p = new Child();当使用多态方式调法时,首先检查父类中是否有 sing() 方法, 如果没,则编译错误;如果有,再去调用子类的 sing()方法。

  3. 两种强制类型转换


    1. 向上类型转换( 向上类型转换(upcast):比如说将比如说将 Cat类型转换为 Animal类型,即将子转换为父类型。对于向上,不需要显式指定。

    2.  向下类型转换( 向下类型转换(downcast):比如将 Animal 类型转换为Cat类型 。即将父转换为子类型。对于向下,必须要显式指定 转换为子类型。对于向下,必须要显式指定 (必须要使用强制类型 (必须要使用强制类型转换)。

  4.  抽象类(abstract class):

使用了abstract关键字修饰的类似抽象类,抽象类无法实例化,也就是说无法用new出来一个抽象类的对象或者说实例。

利用abstract修饰的方法叫做抽象方法。抽象方法必须定义在抽象类中,相对于抽象方法,一般的方法叫做具体方法,因为有申明有实现。如果一个类包含了抽象方法,那么这个类一定是抽象类。但是不是所有的抽象类只有抽象方法,它也可以有具体方法。

接口的地位等同于类,接口中的方法都是抽象方法,一般在接口中可以不写明abstract关键字,默认就会添加public abstract修饰。接口和抽象类很相似,但是抽象类中可以有具体方法,而接口不可以有。类可以通过Implements去实现某个接口或多个接口。如果这个类实现一个接口或多个接口,那么就要实现所有接口的抽象方法。但是如果这个类是一个抽象类,可以不实现接口中的方法。Java不支持多继承,只支持单继承,但是支持多实现,通过多实现可以间接的实现多继承。多态:

所谓的多态无非就是说父类的引用可以执行子类的对象。或者是接口的引用可以指向实现的实例。它们的强制转换都是一样的。

static关键字

修饰对象:属性、方法、类

static 修饰的属性属于类所有,所有实例共有的属性。可以通过类名.属性名进行直接访问,而且推荐这样使用。

static修饰的方法叫静态方法,属于类所有的方法,可以通过类名.静态方法名进行访问。静态方法可以被继承,但是不能被重写。

static修饰的类叫静态类。

final关键字

修饰对象:属性、方法、类
final修饰类说明该类是一个终态类,就是说不允许被继承的类。

final修饰方法说明是一个终态方法,不能被重写。

final修饰属性说明该属性不能被改写。

注意:

    当final修饰一个原生数据类型时,表示该类型值不能改变,比如说final int i=10,就不能够用i=20;去改变这个值。如果修饰的是一个引用类型时,表示指向的对象不能改变,但是对象的值是可以变的。

final修饰变量的赋值:

    a.申明时便赋值。

    b.申明时不复制,但是在所有的构造函数中都需要给它赋值。

静态代码块:

完成一些初始化的工作。首先执行静态代码块,然后执行构造方法。静态代码块在类加载的时候就被执行,而构造方法只有在实例化时才被执行,而且静态代码块只会执行一次,因为类只会被加载一次,但是构造方法不一定执行一次,因为只要new 一个与类相对应的实例时就会去调用相应的构造方法。(实例化对象的过程:首先把类加载到JVM中的类加载器里面,然后由JVM通过加载的类生产对象).

如果继承的结构中有静态代码块又有构造方法,那么它们的执行顺序就是先从最上层类的静态代码块执行到最低层的静态代码块,然后再去从最上到下执行构造方法。不能在静态方法中访问非静态成员变量;可以在静态方法中访问静态成员变量;可以的非静态方法中访问静态成员变量。静态中不能使用this指针,this指针指当前实例。