由abstract修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾。
一个类中如果包含抽象方法,该类应该用 abstract 关键字声明为抽象类。 如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)。
抽象类不可以实例化即使一个类中没有抽象方法,也可以将其定义为抽象类abstract 和 final 关键字不可以同时用于修饰一个类,因为 final 关键字使得类不可继承,而 abstract 修饰的类如果不可以继承将没有任何意义。一个类继承抽象类后,必须重写其抽象方法,不同的子类可以有不同的实现。
接口可以看成是特殊的抽象类,即只包含有抽象方法的抽象类。
一个类可以通过 implements 关键字“实现”接口,一个类实现了某个接口后必须实现该接口中定义的所有方法。 与继承不同,一个类可以实现多个接口,实现的接口直接用逗号分隔。当然,该类需要实现这些接口中定义的所有方法。 接口可以作为一种类型声明变量,一个接口类型的变量可以引用实现了该接口的类的对象,通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现)。
接口间可以存在继承关系,一个接口可以通过extends关键字继承另外一个接口。子接口继承了父接口中定义的所有方法。
多态是同一个行为具有多个不同表现形式或形态的能力。在程序中表现为同一个引用类型,使用不同的实例而执行不同操作,即父类引用,子类对象。
实现多态的两个要素:方法重写、使用父类类型。
一个类的对象可以向上造型的类型有:
父类的类型其实现的接口类型Java编译器根据类型检查调用方法是否匹配。
如果在强制转换过程中出现违背了上述两个前提,将会抛出 ClassCastException 。
对象 instanceof 类或接口
该关键字用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false。